/**
* @file			Global Nav 2 (Revision with Social)
* @written		Daniel J. Dahan
* @date			February 16 / 2010
*/
	function setCookie(name, value, expires, path, domain, secure) {
		domain = location.toString();
		if (domain.indexOf('.gm.ca') != -1){
			if(navigator.appName.indexOf('Microsoft') != -1)
				domain = "";
			else{
				domain = ".gm.ca";
			}
		}
		else if(domain.indexOf('.mminteractive.com') != -1){
			if(navigator.appName.indexOf('Microsoft') != -1)
				domain = "";
			else{
				domain = ".mminteractive.com";
			}
		}
		else{
			domain ="";
		}
		var curCookie = name + '=' + escape(value) + ((expires) ? '; expires=' + expires.toGMTString() : '') + ((path) ? '; path=' + path : '') + ((domain) ? '; domain=' + domain : '') + ((secure) ? '; secure' : '');
		document.cookie = curCookie;
	}

	function switchLangWithSession () {

		var engDelimiter = 'english',
	
		freDelimiter = 'french',
	
		newURL = switchLangSearch(engDelimiter, freDelimiter);
	
		if (newURL != 'null') {
	
			self.location = newURL;
	
			return;
	
		}
	
		engDelimiter = "lang=en";
	
		freDelimeter = "lang=fr";
	
		newURL = switchLangSearch(engDelimiter, freDelimeter);
	
		if (newURL != 'null') {
	
			self.location = newURL;
	
			return;
	
		}
	
		engDelimiter = "_code=en";
	
		freDelimeter = "_code=fr";
	
		newURL = switchLangSearch(engDelimiter, freDelimeter);
	
		if (newURL != 'null') {
	
			self.location = newURL;
	
			return;
	
		}
	
	}

	function switchLangSearch (engDelim, freDelim) {
	
		var docURL = document.URL,
	
		newURL = 'null',
	
		engPosition = 0,
	
		frePosition = 0,
	
		charStart = 0,
	
		charEnd = docURL.length + 1,
	
		engDelimiter = engDelim,
	
		freDelimiter = freDelim;
	
		do {
	
			var test = docURL.substr(charStart, engDelimiter.length);
	
			if (test == engDelimiter) { engPosition = charStart;}
	
			charStart++;
	
		}
	
		while (charStart < charEnd - engDelimiter.length);
	
		if (engPosition > 0) {
	
			newURL = docURL.substr(0,engPosition) + freDelimiter + docURL.substr((engPosition + engDelimiter.length),docURL.length);
	
		} else {
	
			charStart = 0;
	
			do {
	
				var test = docURL.substr(charStart, freDelimiter.length)
	
				if (test == freDelimiter) { frePosition = charStart;}
	
				charStart++;
	
			}
	
			while (charStart < charEnd - freDelimiter.length);
	
			if (frePosition > 0) {
	
				newURL = docURL.substr(0,frePosition) + engDelimiter + docURL.substr((frePosition + freDelimiter.length),docURL.length);
			}
	
		}
		if (engPosition == 0) {
			setCookie("gmcanada_lang","english", "", "/gm");
		}
		else{
			setCookie("gmcanada_lang","french", "", "/gm");
		}
		return newURL;
	}
	

	(function ()
	{
			/**
			* @menu		Site Nav Menu.
			*/
		var oSiteMapNavMenu = 
			{
				/**
				* @function		buildFunctionality
				* @usage		Sets the event handlers and such for the Site Map.
				*/
				buildFunctionality: function ()
				{
					/**
					* @note                              Handlers for the images covering the content sections.
					*/
					$('#SiteMapBTN').hover(function (event)
					{
						if ($.browser.msie && $.browser.version == 6.0){
							$('select').css('visibility','hidden');
							if (window.location.href.indexOf('http://compare.autodata.preprod.gm.ca/compare/main.asp') != -1 || window.location.href.indexOf('http://compare.autodata.gm.ca/compare/main.asp') != -1){
								$('#Main').contents().find('select').css('visibility','hidden');
							}
							else if (window.location.href.indexOf('UsedVehicleLocatorCriteria.do') != -1){
								$('#searchByMakeModelTable').css('visibility','hidden');
							}
						}
						
						if (sLanguage == 'fr')
						{
							document.getElementById('SiteMapBTNImg').style.top = '-103px';
						}
						else
						{
							document.getElementById('SiteMapBTNImg').style.top = '-34px';
						}
						
						document.getElementById('SocialMenuBTNImg').style.top = '0px';
						
						document.getElementById('GlobalNav').style.width = '990px';
						
						document.getElementById('SiteMapMenuContainer').style.display = 'block';
						document.getElementById('SiteMapMenuContainer').style.visibility = 'visible';
						
						$('#SiteMapMenuContainer').stop().animate({top: '0px'}, {queue: false, duration: 500});
						$('#SocialMenuContainer').stop().animate({top: '-650px'}, {queue: false, duration: 500});
					}, function () {}, 1);
					
					$('#GlobalNav').hover(function () {},
					function ()
					{
						if ($.browser.msie && $.browser.version == 6.0){
							$('select').css('visibility','visible');
							if (window.location.href.indexOf('http://compare.autodata.preprod.gm.ca/compare/main.asp') != -1 || window.location.href.indexOf('http://compare.autodata.gm.ca/compare/main.asp') != -1){
								$('#Main').contents().find('select').css('visibility','visible');
							}
							else if (window.location.href.indexOf('UsedVehicleLocatorCriteria.do') != -1){
								$('#searchByMakeModelTable').css('visibility','visible');
							}
						}

						if (sLanguage == 'fr')
						{
							document.getElementById('SiteMapBTNImg').style.top = '-68px';
						}
						else
						{
							document.getElementById('SiteMapBTNImg').style.top = '0px';
						}
						$('#SiteMapMenuContainer').stop().animate({top: '-650px'}, {queue: false, duration: 500, complete: function () {document.getElementById('GlobalNav').style.width = '400px';
						document.getElementById('SiteMapMenuContainer').style.display = 'none';
						document.getElementById('SiteMapMenuContainer').style.visibility = 'hidden';}});
					}, 2);
					
					$('#GoogleSubmit').click(function () {document.getElementById('gsfull').submit();});
					
					$('#CloseSiteMap').click(function () {$('#SiteMapMenuContainer').stop().animate({top: '-650px'}, {queue: false, duration: 500});});
				},
				
				/**
				* @function		getData
				* @usage		Returns the data object for the Site Nav Menu.
				*/
				getData: function ()
				{
					return [
								{
									title: {en: {value: 'Vehicles', url: '/gm/english/vehicles'}, fr: {value: 'V&eacute;hicules', url: '/gm/french/vehicles'}},
									bBorder: true,
									rows:
									[
										[
											{en: {value: 'Buick', url: '/gm/english/vehicles/buick/'}, fr: {value: 'Buick', url: '/gm/french/vehicles/buick/'}},
											{en: {value: 'Cadillac', url: '/gm/english/vehicles/cadillac/'}, fr: {value: 'Cadillac', url: '/gm/french/vehicles/cadillac/'}},
											{en: {value: 'Chevrolet', url: '/gm/english/vehicles/chevrolet/'}, fr: {value: 'Chevrolet', url: '/gm/french/vehicles/chevrolet/'}},
											{en: {value: 'GMC', url: '/gm/english/vehicles/gmc/'}, fr: {value: 'GMC', url: '/gm/french/vehicles/gmc/'}},
											{en: {value: 'HUMMER', url: '/gm/english/vehicles/hummer/'}, fr: {value: 'HUMMER', url: '/gm/french/vehicles/hummer/'}},
											{en: {value: 'Pontiac', url: '/gm/english/vehicles/pontiac/'}, fr: {value: 'Pontiac', url: '/gm/french/vehicles/pontiac/'}}
										],
										
										[
											{en: {value: 'New Vehicles', url: '/gm/english/showrooms/?adv=72465'}, fr: {value: 'V&eacute;hicules neufs', url: '/gm/french/showrooms/?adv=72465'}},
											{bURL: true, en: {value: 'Certified Used Vehicles', url: oEnvInfo.mainServer + '/gm/english/hostredirect?host=http://apps.gm.ca/app/GMCanada/UsedVehicleLocatorCriteria.do&lang=en&nav=040&adv=IOPTENH001&page=qsearch#ddType~dv~refresh~year~1111~make~'}, fr: {value: 'V&eacute;hicules d\'occasion', url: oEnvInfo.mainServer + '/gm/french/hostredirect?host=http://apps.gm.ca/app/GMCanada/UsedVehicleLocatorCriteria.do&lang=fr&nav=040&adv=IOPTENH001&page=qsearch#ddType~dv~refresh~year~1111~make~'}},
											{en: {value: 'Fleet', url: '/gm/english/services/fleet/overview'}, fr: {value: 'Parcs', url: '/gm/french/services/fleet/overview'}},
											{en: {value: 'Commercial Trucks', url: '/gm/english/vehicles/commercial/index'}, fr: {value: 'V&eacute;hicules commerciaux', url: '/gm/french/vehicles/commercial/index'}},
											{en: {value: 'OnStar', url: '/gm/english/shopping/accessories/onstar'}, fr: {value: 'OnStar', url: '/gm/french/shopping/accessories/onstar'}}
											
										]
									]
								},
								
								{	title: {en: {value: 'Shopping Tools', url: '/gm/english/tools'}, fr: {value: 'Outils d\'achat', url: '/gm/french/tools'}},
									rows:
									[
										[
											{bURL: true, en: {value: 'New Vehicle Offers', url: oEnvInfo.mainServer +'/gm/english/hostredirect?host=http://apps.gm.ca/app/GMCanada/offersearch/OfferSearch.do&lang=en'}, fr: {value: 'Offre de v&eacute;hicules neufs', url: oEnvInfo.mainServer +'/gm/french/hostredirect?host=http://apps.gm.ca/app/GMCanada/offersearch/OfferSearch.do&lang=fr'}},
											{bURL: true, en: {value: 'Build &amp; Price', url: oEnvInfo.mainServer + '/gm/english/hostredirect?host=http://configurator.autodata.gm.ca/GMCanada/modelSelect.html&lang=en'}, fr: {value: 'Fabriquer et obtenir un prix', url: oEnvInfo.mainServer + '/gm/french/hostredirect?host=http://configurator.autodata.gm.ca/GMCanada/modelSelect.html&lang=fr'}},
											{bURL: true, en: {value: 'Estimate Payments', url: oEnvInfo.mainServer + '/gm/english/payment-estimator/selectMakeModel'}, fr: {value: 'Estimer les paiements', url: oEnvInfo.mainServer + '/gm/french/payment-estimator/selectMakeModel'}},
											{bURL: true, en: {value: 'Compare Vehicles', url: oEnvInfo.mainServer + '/gm/english/hostredirect?host=http://compare.autodata.gm.ca/compare/main.asp&lang=en&year=2010'}, fr: {value: 'Comparaison de v&eacute;hicules', url: oEnvInfo.mainServer + '/gm/french/hostredirect?host=http://compare.autodata.gm.ca/compare/main.asp&lang=fr&year=2010'}},
											{bURL: true, en: {value: 'Locate a Vehicle', url: oEnvInfo.mainServer + '/gm/english/hostredirect?host=http://apps.gm.ca/app/GMCanada/NewVehicleLocatorCriteria.do&lang=en&nav=0&cta=blank'}, fr: {value: 'Trouvez un v&eacute;hicules', url: oEnvInfo.mainServer + '/gm/french/hostredirect?host=http://apps.gm.ca/app/GMCanada/NewVehicleLocatorCriteria.do&lang=fr&nav=0&cta=blank'}},
											{bURL: true, en: {value: 'Locate a Dealer', url: oEnvInfo.mainServer + '/gm/english/hostredirect?host=http://apps.gm.ca/app/GMCanada/DealerLocatorSearch.do&nav=0&cta=blank&lang=en'}, fr: {value: 'Trouvez un concessionnaire', url: oEnvInfo.mainServer + '/gm/french/hostredirect?host=http://apps.gm.ca/app/GMCanada/DealerLocatorSearch.do&nav=0&cta=blank&lang=fr'}},
											{bURL: true, en: {value: 'Schedule a Test Drive', url: oEnvInfo.mainServer + '/gm/english/hostredirect?host=https://apps.gm.ca/app/GMCanada/RequestAQuote.do&lang=en&raqSource=scheduleTestDrive&scheduleSubSource=new&year=2010#ddType~dv~year~2010'}, fr: {value: 'Rendez-vous pour un essai routier', url: oEnvInfo.mainServer + '/gm/french/hostredirect?host=https://apps.gm.ca/app/GMCanada/RequestAQuote.do&lang=fr&raqSource=scheduleTestDrive&scheduleSubSource=new&year=2010#ddType~dv~year~2010'}},
											{bURL: true, en: {value: 'Request a Quote', url: oEnvInfo.mainServer + '/gm/english/hostredirect?host=https://apps.gm.ca/app/GMCanada/RequestAQuote.do&lang=en&raqSource=new&year=2010#ddType~dv~year~2010'}, fr: {value: 'Demande de soumission', url: oEnvInfo.mainServer + '/gm/french/hostredirect?host=https://apps.gm.ca/app/GMCanada/RequestAQuote.do&lang=fr&raqSource=new&year=2010#ddType~dv~year~2010'}},
											{bURL: true, en: {value: 'Appraise Trade In Value', url: oEnvInfo.mainServer + '/gm/english/services/financial/financing/appraise-tradein-value'}, fr: {value: '&Eacute;valuez votre v&eacute;hicule', url: oEnvInfo.mainServer + '/gm/french/services/financial/financing/appraise-tradein-value'}}
										],
										
										[
											{en: {value: 'First New Car', url: '/gm/english/shopping/first-new-car/overview'}, fr: {value: 'Premi&egrave;re voiture neuve', url: '/gm/french/shopping/first-new-car/overview'}},
											{en: {value: 'Trailering Guide', url: '/gm/english/trailering-guide/all-vehicles/home/overview'}, fr: {value: 'Guide sur le remorquage', url: '/gm/french/trailering-guide/all-vehicles/home/overview'}},
											{en: {value: 'Financing &amp; Insurance', url: '/gm/english/services/financial/overview'}, fr: {value: 'Financement et assurance', url: '/gm/french/services/financial/overview'}}
										]
									]
								},
								
								{
									title: {bURL: true, en: {value: 'Offers and Promotions', url: oEnvInfo.appServer + '/app/GMCanada/offersearch/OfferSearch.do?lang=en'}, fr: {value: 'Offres et promotions', url: oEnvInfo.appServer + '/app/GMCanada/offersearch/OfferSearch.do?lang=fr'}},
									rows:
									[
										[
											{bURL: true, en: {value: 'New Vehicle Offers', url: oEnvInfo.mainServer +'/gm/english/hostredirect?host=http://apps.gm.ca/app/GMCanada/offersearch/OfferSearch.do&lang=en'}, fr: {value: 'Offre de v&eacute;hicules neufs', url: oEnvInfo.mainServer +'/gm/french/hostredirect?host=http://apps.gm.ca/app/GMCanada/offersearch/OfferSearch.do&lang=fr'}},
											{en: {value: 'Goodwrench Offers', url: '/gm/english/services/goodwrench/offers'}, fr: {value: 'Offres Goodwrench', url: '/gm/french/services/goodwrench/offers'}},
											{en: {value: 'Student Bonus', url: '/gm/english/corporate/offers/student-bonus-program/overview'}, fr: {value: 'Prime GM pour &eacute;tudiants', url: '/gm/french/corporate/offers/student-bonus-program/overview'}},
											{en: {value: 'GM Card', url: '/gm/english/services/gm-card/overview'}, fr: {value: 'La Carte GM', url: '/gm/french/services/gm-card/overview'}}
										]
									]
								},
								
								{
									title: {en: {value: 'For Owners', url: '/gm/english/owners/home'}, fr: {value: 'Propri&eacute;taires', url: '/gm/french/owners/home'}},
									rows:
									[
										[
											{en: {value: 'Buick', url: '/gm/english/owner_centre/buick/home/overview'}, fr: {value: 'Buick', url: '/gm/french/owner_centre/buick/home/overview'}},
											{en: {value: 'Cadillac', url: '/gm/english/owner_centre/cadillac/home/overview'}, fr: {value: 'Cadillac', url: '/gm/french/owner_centre/cadillac/home/overview'}},
											{en: {value: 'Chevrolet', url: '/gm/english/owner_centre/chevrolet/home/overview'}, fr: {value: 'Chevrolet', url: '/gm/french/owner_centre/chevrolet/home/overview'}},
											{en: {value: 'GMC', url: '/gm/english/owner_centre/gmc/home/overview'}, fr: {value: 'GMC', url: '/gm/french/owner_centre/gmc/home/overview'}},
											{en: {value: 'HUMMER', url: '/gm/english/owner_centre/corporate/home/overview'}, fr: {value: 'HUMMER', url: '/gm/french/owner_centre/corporate/home/overview'}},
											{en: {value: 'Pontiac', url: '/gm/english/owner_centre/corporate/home/overview'}, fr: {value: 'Pontiac', url: '/gm/french/owner_centre/corporate/home/overview'}},
											{en: {value: 'Saab', url: '/gm/english/owner_centre/corporate/home/overview'}, fr: {value: 'Saab', url: '/gm/french/owner_centre/corporate/home/overview'}},
											{en: {value: 'Saturn', url: '/gm/english/owner_centre/corporate/home/overview'}, fr: {value: 'Saturn', url: '/gm/french/owner_centre/corporate/home/overview'}},
											{en: {value: 'Other', url: '/gm/english/owner_centre/corporate/home/overview'}, fr: {value: 'Autres', url: '/gm/french/owner_centre/corporate/home/overview'}}
										],
										
										[
											{en: {value: 'Goodwrench Service', url: '/gm/english/services/goodwrench/overview'}, fr: {value: 'Service Goodwrench', url: '/gm/french/services/goodwrench/overview'}},
											{en: {value: 'Financing &amp; Insurance', url: '/gm/english/services/financial/overview'}, fr: {value: 'Financement et assurance', url: '/gm/french/services/financial/overview'}},
											{en: {value: 'Warranty', url: '/gm/english/services/warranty/overview'}, fr: {value: 'Garanties', url: '/gm/french/services/warranty/overview'}},
											{en: {value: 'Parts', url: '/gm/english/shopping/parts/overview'}, fr: {value: 'Pi&egrave;ces', url: '/gm/french/shopping/parts/overview'}},
											{en: {value: 'Accessories', url: '/gm/english/shopping/accessories/overview'}, fr: {value: 'Accessoires', url: '/gm/french/shopping/accessories/overview'}},
											{en: {value: 'OnStar', url: '/gm/english/shopping/accessories/onstar'}, fr: {value: 'OnStar', url: '/gm/french/shopping/accessories/onstar'}},
											{en: {value: 'XM Radio', url: '/gm/english/shopping/xm-radio/overview'}, fr: {value: 'Radio XM', url: '/gm/french/shopping/xm-radio/overview'}},
											{en: {value: 'Appraise Trade In Value', url: '/gm/english/services/financial/financing/appraise-tradein-value'}, fr: {value: '&Eacute;valuez votre v&eacute;hicule', url: '/gm/french/services/financial/financing/appraise-tradein-value'}}
											
										]
									]
								},
								
								{
									title: {bURL: true, en: {value: 'Dealers', url: oEnvInfo.mainServer + '/gm/english/hostredirect?host=http://apps.gm.ca/app/GMCanada/DealerLocatorSearch.do&nav=0&cta=blank&lang=en'}, fr: {value: 'Concessionnaires', url: oEnvInfo.mainServer + '/gm/french/hostredirect?host=http://apps.gm.ca/app/GMCanada/DealerLocatorSearch.do&nav=0&cta=blank&lang=fr'}},
									rows:
									[
										[
											{bURL: true, en: {value: 'Locate a Dealer', url: oEnvInfo.mainServer + '/gm/english/hostredirect?host=http://apps.gm.ca/app/GMCanada/DealerLocatorSearch.do&nav=0&cta=blank&lang=en'}, fr: {value: 'Trouvez un concessionnaire', url: oEnvInfo.mainServer + '/gm/french/hostredirect?host=http://apps.gm.ca/app/GMCanada/DealerLocatorSearch.do&nav=0&cta=blank&lang=fr'}}
										]
									]
								},
								
								{
									title: {en: {value: 'About Us', url: '/gm/english/about'}, fr: {value: '&Agrave; notre sujet', url: '/gm/french/about'}},
									rows:
									[
										[
											{en: {value: 'Our Company', url: '/inm/gmcanada/english/about/index.html'}, fr: {value: 'Aper&ccedil;u de la soci&eacute;t&eacute;', url: '/inm/gmcanada/french/about/index.html'}},
											{en: {value: 'News and Events', url: '/inm/gmcanada/english/about/News/news.html'}, fr: {value: 'Nouvelles et &eacute;v&eacute;nements', url: '/inm/gmcanada/french/about/News/news.html'}},
											{en: {value: 'The Olympic Games', url: '/gm/english/corporate/olympics/overview'}, fr: {value: 'Les Jeux olympiques', url: '/gm/french/corporate/olympics/overview'}},
											{en: {value: 'Career Centre', url: '/inm/gmcanada/english/about/Careers/careers.html'}, fr: {value: 'Centre des carri&egrave;res', url: '/inm/gmcanada/french/about/Careers/careers.html'}},
											{bURL: true, en: {value: 'Contact Us', url: 'https://contactus.gm.ca/english/email_us.aspx'}, fr: {value: 'Renseignements', url: 'https://contactus.gm.ca/french/email_us.aspx'}}
										]
									]
								}
							];
				},
				
				/**
				* @function		getCSS
				* @usage		Returns the CSS for the Site Map Menu.
				*/
				getCSS: function ()
				{
					return  '#specialWrap {width:990px; margin:0 auto; text-align:left; float:none;position:relative;z-index:9999;}\n\
							#SiteMapMenuContainer {position: absolute; top: -600px; left: 0; width: 100%; display: none; visibility: hidden;}\n\
							#SiteMapMenuContainer * {font-size: 11px; font-family:Arial, Sans-serif;}\n\
							#SiteMapMenuContainer .MenuContentArea {float: left; position: relative; padding-top: 20px; padding-bottom: 10px; width: 100%; background: #fff;}\n\
							#SiteMapMenuContainer .MenuGradientBar {float: left; position: relative; width: 100%; height: 34px; background: url(' + oEnvInfo.imgServer + '/images/gmcl_navigation/top_nav_grey_fade.jpg) repeat-x}\n\
							#SiteMapMenuContainer .MenuColumnTitle {float: left; margin: 0 0 10px 0; _margin-bottom:0; padding: 0px; position: relative; width: 160px; font-weight: bold; text-align: left; text-indent: 10px;}\n\
							#SiteMapMenuContainer .MenuColumnTitle a {font-size: 12px; color: #3b5997; text-decoration: none;}\n\
							#SiteMapMenuContainer .MenuColumnTitle a:hover {text-decoration: underline;}\n\
							#SiteMapMenuContainer .MenuColumn {float: left; position: relative; width: 159px; height: 300px; max-height: 100%; border-left: 1px solid #dedfe9;}\n\
							#SiteMapMenuContainer .MenuColumnSection {margin: 0 0 5px 0; padding: 0px; padding-top:5px; _padding-top:5px; _padding-bottom:0; margin-left: 5px; _margin-bottom: 0px; width: 150px;}\n\
							#SiteMapMenuContainer .MenuColumnSection ul {margin: 0 0; padding: 0 0; list-style: none;}\n\
							#SiteMapMenuContainer .MenuColumnSection ul li {padding: 0 5px; margin:3px 0 3px 0;_margin:0 0; _padding-left: 5px; _padding-right: 5px; width: 139px; line-height: 12px; text-align: left;}\n\
							#SiteMapMenuContainer .MenuColumnSection ul li a {font-size: 11px; font-weight: bold; color: #686868; text-decoration: none;}\n\
							#SiteMapMenuContainer .MenuColumnSection ul li a:hover {text-decoration: underline;}\n\
							#SiteMapMenuContainer .MenuColumnSpacer {border-bottom: 1px solid #dedfe9;}\n\
							#SiteMapMenuContainer .MenuColumnSmall {float: left; position: relative; padding: 0 10px; width: 140px;}\n\
							#SiteMapMenuContainer .MenuColumnURL {margin-top: 10px;}\n\
							#SiteMapMenuContainer .MenuColumnURL a {font-size: 12px; font-weight: bold; color: #3b5997; text-decoration: none;}\n\
							#SiteMapMenuContainer .MenuColumnURL a:hover {text-decoration: underline;}\n\
							#SiteMapMenuContainer #GoogleSearch {float: left; position: relative; width: 100%; height: 55px; background: #ccc;}\n\
							#SiteMapMenuContainer #GoogleSearch .GoogleLogo {float: left; position: relative; margin-left: 20px; margin-top: 10px; _margin-left: 20px;}\n\
							#SiteMapMenuContainer #GoogleSearch .GoogleFormContainer {float: left; position: relative; margin-left: 20px; _margin-left: 20px; margin-top: 15px; height: 35px;}\n\
							#SiteMapMenuContainer #GoogleSearch .GoogleForm {float: left; position: relative;}\n\
							#SiteMapMenuContainer #GoogleSearch .GoogleForm #search {padding: 0 4px; width: 200px; height: 23px; line-height: 23px; font-size: 12px; color: #373737; border: 1px solid #3b5997; background: #fff; outline: none;}\n\
							#SiteMapMenuContainer #GoogleSubmit {float: left; position: relative; margin-left: 20px; _margin-left: 20px; padding: 0 10px; height: 23px; line-height: 23px; font-size: 12px; font-weight: bold; border: 1px solid #dedfe9; background: #3b5997; color: #fff; cursor: pointer;}\n\
							#SiteMapMenuContainer #CloseSiteMap {float: right; position: relative; margin-right: 20px; _margin-right: 20px; margin-top: 10px; padding: 0 10px; height: 25px; line-height: 25px; font-size: 12px; font-weight: bold; color: #3b5997; cursor: pointer;}';
				},
				
				/**
				* @function		getElement
				* @usage		Returns the xhtml elements for the Site Map Menu.
				*/
				getElement: function ()
				{
					var oDiv = document.createElement('div');
						
						oDiv.id = 'SiteMapMenuContainer';
						oDiv.className = 'MenuContainer';
												
						oDiv.innerHTML = '<div class="MenuGradientBar">\
										  	<div class="GMLogoBTN"><a href="' + oEnvInfo.mainServer + '"><img style="border: none; outline: none;" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/gm_logo_footer.gif" /></a></div>\n\
											<div class="GMBTN"><a href="' + oEnvInfo.mainServer + (sLanguage == 'fr' ? '/gm/french/home">VISITEZ L\'ACCUEIL GM >' : '/gm/english/home">VISIT GM HOME >') + '</a></div>\n\
										  </div>\
										  <div id="SiteMapContentArea" class="MenuContentArea"></div>\
										  <div id="GoogleSearch">\
										  	<div class="GoogleLogo"><img src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/powered_by_google.gif" /></div>\
											<div class="GoogleFormContainer">\
												<div class="GoogleForm">\
													<form id="gsfull" name="gsfull" action="http://www.gm.ca/servlet/advsearch" method="get">\
														<input type="text" id="search" name="q" />\
														<input id="GoBtn" name="vehicle_collection" type="hidden" value="" />\
														<input value="xml_no_dtd" name="output" type="hidden"/>\
														'+ (sLanguage == 'fr' ? '<input name="client" value="french_pref_search" type="hidden"/><input name="site" type="hidden" value="french_pref_search"/><input name="proxystylesheet" type="hidden" value="french_pref_search"/>' : '<input name="client" value="english_pref_search" type="hidden"/><input name="site" type="hidden" value="english_pref_search"/><input name="proxystylesheet" type="hidden" value="english_pref_search"/>') + '\n\
														<input value="UTF-8" name="oe" type="hidden"/>\
														<input value="0" name="filter" type="hidden"/>\
														<input value="40" name="num" type="hidden"/>\
														<input value="description" name="getfields" type="hidden"/>\
													</form>\
												</div>\
												<div id="GoogleSubmit">' + (sLanguage == 'fr' ? 'Recherche' : 'SEARCH') + '</div>\
											</div>\
											<div id="CloseSiteMap">' + (sLanguage == 'fr' ? 'Fermer X' : 'CLOSE X') + '</div>\
										</div>';
					
					return oDiv;
				},
				
				/**
				* @function 	getContainer
				* @usage		Returns the menu container object.
				*/
				getContainer: function ()
				{
					return document.getElementById('SiteMapMenuContainer');	
				},
				
				/**
				* @function		getContentArea
				* @usage		Returns the menu content object.
				*/
				getContentArea: function ()
				{
					return document.getElementById('SiteMapContentArea');	
				}
			};
	
			
			/**
			* @menu		Nav Menu.
			*/
		var oNavMenu = 
			{
				/**
				* @function		getData
				* @usage		Returns the data object for the Site Nav Menu.
				*/
				getData: function ()
				{
					return [
							{
								title: {bURL: true, en: {value: '<div class="TopNavMenuTitleContainerEnglishMyGM"></div>', url: oEnvInfo.appServer + '/app/mygm/Logon.do?lang=en'}, fr: {value: '<div class="TopNavMenuTitleContainerFrenchMyGM"></div>', url: oEnvInfo.appServer + '/app/mygm/Logon.do?lang=fr'}},
								rows:
								[
									[
										{bURL: true, en: {value: 'My Showroom', url: oEnvInfo.appsSecureServer + '/app/mygm/MyShowroom.do?lang=en&cta=myshowroom'}, fr: {value: 'Ma salle d\'exposition', url: oEnvInfo.appsSecureServer + '/app/mygm/MyShowroom.do?lang=fr&cta=myshowroom'}},
										{bURL: true, en: {value: 'My Dealers', url: oEnvInfo.appsSecureServer + '/app/mygm/MyDealers.do?lang=en&cta=mydealers&ComponentName=buycentre'}, fr: {value: 'Mes concessionnaires', url: oEnvInfo.appsSecureServer + '/app/mygm/MyDealers.do?lang=fr&cta=mydealers&ComponentName=buycentre'}},
										{bURL: true, en: {value: 'My Driveway', url: oEnvInfo.appsSecureServer + '/app/mygm/MyDriveway.do?nav=mygm&lang=en'}, fr: {value: 'Mon garage', url: oEnvInfo.appsSecureServer + '/app/mygm/MyDriveway.do?nav=mygm&lang=fr'}},
										{bURL: true, en: {value: 'My Preferences', url: oEnvInfo.appsSecureServer + '/app/mygm/ManageProfile.do?lang=en'}, fr: {value: 'Mes pr&eacute;f&eacute;rences', url: oEnvInfo.appsSecureServer + '/app/mygm/ManageProfile.do?lang=fr'}}
									]
								]
							},
							
							{
								title: {id: 'nav_lang', bURL: true, en: {value: '<div class="TopNavMenuTitleContainerEnglishLangToggle"></div>', url: 'javascript:switchLangWithSession();'}, fr: {bURL: true, value: '<div class="TopNavMenuTitleContainerFrenchLangToggle"></div>', url: 'javascript:switchLangWithSession();'}}
							}
						];
				},
				
				/**
				* @function		getCSS
				* @usage		Returns the CSS for the Site Map Menu.
				*/
				getCSS: function ()
				{
					return '#TopNavMenuContainer {float: left; position: relative; repeat-x; z-index: 11000;}\n\
							#TopNavMenuContainer * {font-size: 11px; font-family:Arial, Sans-serif;}\n\
							#TopNavMenuContainer .MenuContentArea {float: left; position: relative;}\n\
							#TopNavMenuContainer .MenuColumn {float: left; position: relative;}\n\
							#TopNavMenuContainer .MenuColumn:hover .MenuColumnSection {display: block; visibility: visible;}\n\
							#TopNavMenuContainer .MenuColumnTitle {float: left; position: relative; height: 34px; line-height: 34px; font-weight: bold; cursor: pointer;}\n\
							#TopNavMenuContainer .MenuColumnTitle a {padding: 0 0; display: block; position: relative; font-size: 10px; font-weight: bold; color: #686868; text-decoration: none;}\n\
							#TopNavMenuContainer .MenuColumnTitle a:hover {text-decoration: underline;}\n\
							#TopNavMenuContainer .MenuColumnTitle a.MenuTitleBorder {border: none;}\n\
							#TopNavMenuContainer .MenuColumnSection {padding: 5px 0; position: absolute; top: 34px; right: 0; background: #EEE; display: none; visibility: hidden;}\n\
							#TopNavMenuContainer .MenuColumnSection ul {margin: 0 0; padding: 0 0; list-style: none;}\n\
							#TopNavMenuContainer .MenuColumnSection ul li {padding: 1px 10px; position: relative;  line-height: 12px; text-align: left; white-space: nowrap;}\n\
							#TopNavMenuContainer .MenuColumnSection ul li a {position: relative; font-size: 11px; color: #686868; text-decoration: none;}\n\
							#TopNavMenuContainer .MenuColumnSection ul li a:hover {text-decoration: underline;}\
							#TopNavMenuContainer .TopNavMenuTitleContainerEnglishLangToggle, #TopNavMenuContainer .TopNavMenuTitleContainerEnglishMyGM, #TopNavMenuContainer .TopNavMenuTitleContainerFrenchLangToggle, #TopNavMenuContainer .TopNavMenuTitleContainerFrenchMyGM {position: relative; width: 90px; height: 34px; overflow: hidden; background: url(' + oEnvInfo.imgServer + '/images/gmcl_navigation/nav_sprite.gif);}\
							#TopNavMenuContainer .TopNavMenuTitleContainerEnglishLangToggle {width: 51px; background-position: -239px 0;}\
							#TopNavMenuContainer a:hover .TopNavMenuTitleContainerEnglishLangToggle {background-position: -239px -34px;}\
							#TopNavMenuContainer .TopNavMenuTitleContainerFrenchLangToggle {width: 45px; background-position: -245px -68px;}\
							#TopNavMenuContainer a:hover .TopNavMenuTitleContainerFrenchLangToggle {background-position: -245px -102px}\
							#TopNavMenuContainer .TopNavMenuTitleContainerEnglishMyGM {width: 52px; background-position: -186px 0;}\
							#TopNavMenuContainer a:hover .TopNavMenuTitleContainerEnglishMyGM {background-position: -186px -34px;}\
							#TopNavMenuContainer .TopNavMenuTitleContainerFrenchMyGM {width: 59px; background-position: -186px -68px;}\
							#TopNavMenuContainer a:hover .TopNavMenuTitleContainerFrenchMyGM {background-position: -186px -102px}';
				},
				
				/**
				* @function		getElement
				* @usage		Returns the xhtml elements for the Site Map Menu.
				*/
				getElement: function ()
				{
					var oDiv = document.createElement('div');
						oDiv.style.display = 'none';
						oDiv.style.visiblity = 'hidden';
					
					return oDiv;
				},
				
				/**
				* @function 	getContainer
				* @usage		Returns the menu container object.
				*/
				getContainer: function ()
				{
					return document.getElementById('TopNavMenuContainer');	
				},
				
				/**
				* @function		getContentArea
				* @usage		Returns the menu content object.
				*/
				getContentArea: function ()
				{
					return document.getElementById('NavMenuContentArea');	
				}
			};
			
			/**
			* @menu		Nav Menu.
			*/
		var oSocialMenu = 
			{
				/**
				* @note		currentTab, holds the value of the current tab selection.
				*/
				currentTab: null,
				
				/**
				* @function 	extendBuild
				* @usage		Updates the columns in the tab sections.
				*/
				extendBuild: function (sTab, oData)
				{
					var oContentArea = oSocialMenu.getContentArea();
						
						oContentArea.innerHTML = '';
						
					/**
					* @note		Ensure data integrity before continuing.
					*/
					if (typeof oData == 'object' && oData != null)
					{
						for (var i = 0, l = oData.length; i < l; ++i)
						{
							/**
							* @note		Pass the column's data to the addColumn function to create the column object.
							*/
							oContentArea.appendChild(oGlobalNavBuild.addColumn(oData[i], false, false));
						}
					}
					
					/**
					* @note		Adjust the background of the tab
					*/
					if (oSocialMenu.currentTab)
					{
						oSocialMenu.currentTab.style.background = 'url(' + oEnvInfo.imgServer + '/images/gmcl_navigation/tab_off.gif)';	
					}
					
					oSocialMenu.currentTab = document.getElementById(sTab);
					
					if (oSocialMenu.currentTab)
					{
						oSocialMenu.currentTab.style.background = 'url(' + oEnvInfo.imgServer + '/images/gmcl_navigation/tab_on.gif)';
					}
				},
				
				getGMData: function ()
				{
					return [
							{
								title: {bURL: true, bLink: true, bWindow: true, en: {value: '<div class="SocialLogo"><img class="SocialFacebook" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialFacebook" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								bBorder: true,
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'General Motors', url: 'http://www.facebook.com/generalmotors'}, fr: {value: 'General Motors', url: 'http://www.facebook.com/generalmotors'}},
										{bURL: true, bWindow: true, en: {value: 'OnStar', url: 'http://www.facebook.com/onstar'}, fr: {value: 'OnStar', url: 'http://www.facebook.com/onstar'}}
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialTwitter" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialTwitter" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'GM Canada', url: 'http://twitter.com/gmcanada'}, fr: {value: 'GM Canada', url: 'http://twitter.com/gmcanada'}},
										{bURL: true, bWindow: true, en: {value: 'General Motors', url: 'http://twitter.com/gmblogs'}, fr: {value: 'General Motors', url: 'http://twitter.com/gmblogs'}},
										{bURL: true, bWindow: true, en: {value: 'OnStar', url: 'http://twitter.com/TheReal_OnStar'}, fr: {value: 'OnStar', url: 'http://twitter.com/TheReal_OnStar'}},
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialFlickr" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialFlickr" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'GM Blog Photos', url: 'http://www.flickr.com/photos/gmblogs/'}, fr: {value: 'Photos du blogue GM', url: 'http://www.flickr.com/photos/gmblogs/'}}
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialYouTube" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialYouTube" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'OnStar', url: 'http://www.youtube.com/user/OnStar'}, fr: {value: 'OnStar', url: 'http://www.youtube.com/user/OnStar'}},
										{bURL: true, bWindow: true, en: {value: 'Videos from the GM Blog', url: 'http://www.youtube.com/user/gmblogs'}, fr: {value: 'Vid&eacute;os du blogue GM', url: 'http://www.youtube.com/user/gmblogs'}},
										{bURL: true, bWindow: true, en: {value: 'GM\'s New Technologies Channel', url: 'http://www.youtube.com/user/GMnext'}, fr: {value: 'Canal Nouvelles technologies GM', url: 'http://www.youtube.com/user/GMnext'}}
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, bLink: true, en: {value: 'Conversations', url: '#'}, fr: {value: 'Conversations', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'FastLane Blog', url: 'http://fastlane.gmblogs.com/'}, fr: {value: 'Blogue Voie rapide', url: 'http://fastlane.gmblogs.com/'}},
										{bURL: true, bWindow: true, en: {value: 'The Lab Blog', url: 'http://thelab.gmblogs.com/'}, fr: {value: 'Blogue du lab', url: 'http://thelab.gmblogs.com/'}}
									]
								]
							}
						];
				},
				
				getChevroletData: function ()
				{
					return [
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialFacebook" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialFacebook" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								bBorder: true,
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Chevrolet', url: 'http://www.facebook.com/chevrolet'}, fr: {value: 'Chevrolet', url: 'http://www.facebook.com/chevrolet'}},
										{bURL: true, bWindow: true, en: {value: 'Camaro', url: 'http://www.facebook.com/login.php#/chevycamaro'}, fr: {value: 'Camaro', url: 'http://www.facebook.com/login.php#/chevycamaro'}},
										{bURL: true, bWindow: true, en: {value: 'Cruze', url: 'http://www.facebook.com/chevycruze?ref=ts'}, fr: {value: 'Cruze', url: 'http://www.facebook.com/chevycruze?ref=ts'}},
										{bURL: true, bWindow: true, en: {value: 'Volt', url: 'http://www.facebook.com/chevroletvolt'}, fr: {value: 'Volt', url: 'http://www.facebook.com/chevroletvolt'}},
										{bURL: true, bWindow: true, en: {value: 'Chevrolet On Scene ', url: 'http://www.facebook.com/chevroletonscene'}, fr: {value: 'Chevrolet On Scene ', url: 'http://www.facebook.com/chevroletonscene'}},
										{bURL: true, bWindow: true, en: {value: 'Chevrolet Racing', url: 'http://www.facebook.com/group.php?gid=2216942064&ref=search&sid=513597044.2724077825..1'}, fr: {value: 'Course Chevrolet', url: 'http://www.facebook.com/group.php?gid=2216942064&ref=search&sid=513597044.2724077825..1'}}
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialTwitter" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialTwitter" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Chevrolet', url: 'http://twitter.com/chevrolet'}, fr: {value: 'Chevrolet', url: 'http://twitter.com/chevrolet'}},
										{bURL: true, bWindow: true, en: {value: 'Volt\'s New Technology', url: 'http://twitter.com/chevyvolt'}, fr: {value: 'Nouvelle technologie Volt', url: 'http://twitter.com/chevyvolt'}},

										{bURL: true, bWindow: true, en: {value: 'Chevrolet On Scene ', url: 'http://www.twitter.com/ChevyOnScene'}, fr: {value: 'Chevrolet On Scene ', url: 'http://www.twitter.com/ChevyOnScene'}}
									]
								]
							},	
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialFlickr" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialFlickr" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Chevrolet On Scene', url: 'http://www.flickr.com/photos/chevroletonscene'}, fr: {value: 'Chevrolet On Scene', url: 'http://www.flickr.com/photos/chevroletonscene/'}},
									]
								]
							},
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialYouTube" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialYouTube" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Chevrolet', url: 'http://www.youtube.com/chevrolet'}, fr: {value: 'Chevrolet', url: 'http://www.youtube.com/chevrolet'}},
										{bURL: true, bWindow: true, en: {value: 'Chevrolet Canada', url: 'http://www.youtube.com/user/ChevroletCanada'}, fr: {value: 'Chevrolet Canada', url: 'http://www.youtube.com/user/ChevroletCanada'}}
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: 'Conversations', url: '#'}, fr: {value: 'Conversations', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Chevrolet Volt News and Discussions', url: 'http://www.chevroletvoltage.com'}, fr: {value: 'Nouvelles et discussions sur la Volt de Chevrolet', url: 'http://www.chevroletvoltage.com'}},
										{bURL: true, bWindow: true, en: {value: 'Truck Owners Network Forum', url: 'http://tonboards.mminteractive.com/jiveforums/index.jspa'}, fr: {value: 'Forum du R&eacute;seau des mordus de camions', url: 'http://tonboards.mminteractive.com/jiveforums/index.jspa'}}
									]
								]
							}
						];
				},
				
				getBuickData: function ()
				{
					
					return [
							{
								title: {bURL: true, bWindow: true, bLink: true, bBorder: true, en: {value: '<div class="SocialLogo"><img class="SocialFacebook" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialFacebook" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								 bBorder: true, 
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Buick', url: 'http://www.facebook.com/login.php#/buick'}, fr: {value: 'Buick', url: 'http://www.facebook.com/login.php#/buick'}}
									]
								]
							},
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialYouTube" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialYouTube" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'All New Buick Buzz &amp; Videos', url: 'http://www.youtube.com/user/BuickBuzz'}, fr: {value: 'Buzz et vid&eacute;os sur la toute nouvelle gamme Buick', url: 'http://www.youtube.com/user/BuickBuzz'}}
									]
								]
							},
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialTwitter" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialTwitter" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Buick', url: 'http://twitter.com/buick'}, fr: {value: 'Buick', url: 'http://twitter.com/buick'}},
									]
								]
							}
						];
				},
				
				getGMCData: function ()
				{
					return [
							{
								title: {bURL: true, bWindow: true, bLink: true, bBorder: true, en: {value: '<div class="SocialLogo"><img class="SocialFacebook" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialFacebook" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								bBorder: true, 
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'GMC', url: 'http://www.facebook.com/gmc'}, fr: {value: 'GMC', url: 'http://www.facebook.com/gmc'}},
										{bURL: true, bWindow: true, en: {value: 'GMC &amp; The Stampede', url: 'http://www.facebook.com/pages/GMC-The-Calgary-Stampede/75572357419?ref=ts'}, fr: {value: 'GMC et le Stampede', url: 'http://www.facebook.com/pages/GMC-The-Calgary-Stampede/75572357419?ref=ts'}},
										{bURL: true, bWindow: true, en: {value: 'GMC Cup Ski Series', url: 'http://www.facebook.com/PontiacGMCCanada'}, fr: {value: 'Les s&eacute;ries de la coupe de ski GMC', url: 'http://www.facebook.com/PontiacGMCCanada'}}
									]
								]
							},
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialTwitter" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialTwitter" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'GMC', url: 'http://twitter.com/thisisgmc'}, fr: {value: 'GMC', url: 'http://twitter.com/thisisgmc'}},
									]
								]
							},
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialYouTube" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialYouTube" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'GMC Terrain', url: 'http://youtube.com/gmc'}, fr: {value: 'Terrain de GMC', url: 'http://youtube.com/gmc'}}
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: 'Conversations', url: '#'}, fr: {value: 'Conversations', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Truck Owners Network Forum', url: 'http://tonboards.mminteractive.com/jiveforums/index.jspa'}, fr: {value: 'Forum du R&eacute;seau des mordus de camions', url: 'http://tonboards.mminteractive.com/jiveforums/index.jspa'}}
									]
								]
							}
						];
				},
				
				getCadillacData: function ()
				{
					return [
							{
								title: {bURL: true, bWindow: true, bLink: true, bBorder: true, en: {value: '<div class="SocialLogo"><img class="SocialFacebook" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialFacebook" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								bBorder: true,
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Cadillac', url: 'http://www.facebook.com/cadillac'}, fr: {value: 'Cadillac', url: 'http://www.facebook.com/cadillac'}},
										{bURL: true, bWindow: true, en: {value: 'Festival Insider', url: 'http://www.facebook.com/festivalinsider'}, fr: {value: 'Festival Insider', url: 'http://www.facebook.com/festivalinsider'}}
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialTwitter" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialTwitter" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Cadillac', url: 'http://twitter.com/Cadillac'}, fr: {value: 'Cadillac', url: 'http://twitter.com/Cadillac'}},
										{bURL: true, bWindow: true, en: {value: 'Festival Insider', url: 'http://twitter.com/festivalinsider'}, fr: {value: 'Festival Insider', url: 'http://twitter.com/festivalinsider'}}
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialFlickr" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialFlickr" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Festival Insider', url: 'http://www.flickr.com/tiffinsider'}, fr: {value: 'Festival Insider', url: 'http://www.flickr.com/tiffinsider'}}
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: '<div class="SocialLogo"><img class="SocialYouTube" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}, fr: {value: '<div class="SocialLogo"><img class="SocialYouTube" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/social_logos.gif" /></div>', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Cadillac', url: 'http://www.youtube.com/MyCadillacStory'}, fr: {value: 'Cadillac', url: 'http://www.youtube.com/MyCadillacStory'}},
										{bURL: true, bWindow: true, en: {value: 'Festival Insider', url: 'http://www.youtube.com/tiffinsider'}, fr: {value: 'Festival Insider', url: 'http://www.youtube.com/tiffinsider'}}
									]
								]
							},
							
							{
								title: {bURL: true, bWindow: true, bLink: true, en: {value: 'Conversations', url: '#'}, fr: {value: 'Conversations', url: '#'}},
								rows:
								[
									[
										{bURL: true, bWindow: true, en: {value: 'Cadillac Notes Blog', url: 'http://cadillac.gmblogs.com/'}, fr: {value: 'Blogue-notes Cadillac', url: 'http://cadillac.gmblogs.com/'}},
										{bURL: true, bWindow: true, en: {value: 'Festival Insider', url: 'http://www.festivalinsider.ca/blog/'}, fr: {value: 'Festival Insider', url: 'http://www.festivalinsider.ca/blog/'}}
									]
								]
							}
						];
				},
				
				/**
				* @function		buildFunctionality
				* @usage		Sets the event handlers and such for the Site Map.
				*/
				buildFunctionality: function ()
				{
					
					/**
					* @note		Handlers for the images covering the content sections.
					*/
					$('#SocialMenuBTN').hover(function ()
					{
						if ($.browser.msie && $.browser.version == 6.0){
							$('select').css('visibility','hidden');
							if (window.location.href.indexOf('http://compare.autodata.preprod.gm.ca/compare/main.asp') != -1 || window.location.href.indexOf('http://compare.autodata.gm.ca/compare/main.asp') != -1){
								$('#Main').contents().find('select').css('visibility','hidden');
							}
							else if (window.location.href.indexOf('UsedVehicleLocatorCriteria.do') != -1){
								$('#searchByMakeModelTable').css('visibility','hidden');
							}
						}

						document.getElementById('SocialMenuContainer').style.display = 'block';
						document.getElementById('SocialMenuContainer').style.visibility = 'visible';
						
						document.getElementById('GlobalNav').style.width = '990px';
						
						if (sLanguage == 'fr')
						{
							document.getElementById('SiteMapBTNImg').style.top = '-68px';
						}
						else
						{
							document.getElementById('SiteMapBTNImg').style.top = '0px';
						}
						
						document.getElementById('SocialMenuBTNImg').style.top = '-34px';
						
						$('#SocialMenuContainer').stop().animate({top: '0px'}, {queue: false, duration: 500});
						$('#SiteMapMenuContainer').stop().animate({top: '-650px'}, {queue: false, duration: 500});
					}, function () {}, 3);
					
					$('#GlobalNav').hover(function () {},
					function ()
					{
						if ($.browser.msie && $.browser.version == 6.0){
							$('select').css('visibility','visible');
							if (window.location.href.indexOf('http://compare.autodata.preprod.gm.ca/compare/main.asp') != -1 || window.location.href.indexOf('http://compare.autodata.gm.ca/compare/main.asp') != -1){
								$('#Main').contents().find('select').css('visibility','visible');
							}
							else if (window.location.href.indexOf('UsedVehicleLocatorCriteria.do') != -1){
								$('#searchByMakeModelTable').css('visibility','visible');
							}
						}

						
						document.getElementById('SocialMenuBTNImg').style.top = '0px';
						$('#SocialMenuContainer').stop().animate({top: '-650px'}, {queue: false, duration: 500, complete: function () {document.getElementById('GlobalNav').style.width = '400px';
							document.getElementById('SocialMenuContainer').style.display = 'none';
							document.getElementById('SocialMenuContainer').style.visibility = 'hidden';
						}});
					}, 4);
					
					$('#CloseSocialMenu').click(function () {$('#SocialMenuContainer').stop().animate({top: '-650px'}, {queue: false, duration: 500});});
					
					$('#GMTab').click(function () {
						oSocialMenu.extendBuild('GMTab', oSocialMenu.getGMData());
					});
					
					$('#CHEVROLETTab').click(function () {
						oSocialMenu.extendBuild('CHEVROLETTab', oSocialMenu.getChevroletData());
					});
					$('#BUICKTab').click(function () {
						oSocialMenu.extendBuild('BUICKTab', oSocialMenu.getBuickData());
					});
					$('#GMCTab').click(function () {
						oSocialMenu.extendBuild('GMCTab', oSocialMenu.getGMCData());
					});
					$('#CADILLACTab').click(function () {
						oSocialMenu.extendBuild('CADILLACTab', oSocialMenu.getCadillacData());
					});
				},
				
				/**
				* @function		getData
				* @usage		Returns the data object for the Site Nav Menu.
				*/
				getData: function ()
				{
					var aSection = ['gmc', 'buick', 'cadillac', 'chevrolet'],
						i = aSection.length - 1,
						sURL = window.location.href,
						sTab = 'GM',
						oBTN;
					
						for (; i >= 0; --i)
						{
							if (sURL.indexOf(aSection[i]) != -1)
							{
								sTab = aSection[i].toUpperCase();
								break;	
							}
						}
						
						oBTN = document.getElementById(sTab + 'Tab');
						
						if (oBTN)
						{
							oBTN.style.background = 'url(' + oEnvInfo.imgServer + '/images/gmcl_navigation/tab_on.gif)';	
						}
						
						if (oSocialMenu.currentTab)
						{
							oSocialMenu.currentTab.style.background = 'url(' + oEnvInfo.imgServer + '/images/gmcl_navigation/tab_off.gif)';		
						}
						
						oSocialMenu.currentTab = oBTN;
						
						switch (sTab)
						{
							case 'GMC':
								return oSocialMenu.getGMCData();
							break;
							
							case 'BUICK':
								return oSocialMenu.getBuickData();
							break;
							
							case 'CHEVROLET':
								return oSocialMenu.getChevroletData();
							break;
							
							case 'CADILLAC':
								return oSocialMenu.getCadillacData();
							break;
							
							default:
								return oSocialMenu.getGMData();
							break;
						}
				},
				
				/**
				* @function		getCSS
				* @usage		Returns the CSS for the Site Map Menu.
				*/
				getCSS: function ()
				{
					return '#SocialMenuContainer {position: absolute; top: -600px; left: 0; width: 100%; display: none; visibility: hidden;}\n\
							#SocialMenuContainer * {font-size: 11px; font-family:Arial, Sans-serif;}\n\
							#SocialMenuContainer .MenuContentArea {float: left; position: relative; padding: 20px 0; width: 100%; height: 240px; background: #fff;}\n\
							#SocialMenuContainer .MenuGradientBar {float: left; position: relative; width: 100%; height: 34px; background: url(' + oEnvInfo.imgServer + '/images/gmcl_navigation/top_nav_grey_fade.jpg) repeat-x}\n\
							#SocialMenuContainer .MenuColumnTitle {float: left; padding-bottom: 10px; padding-left: 15px; position: relative; width: 182px; height: 30px; line-height: 30px; font-weight: bold; text-align: left;}\n\
							#SocialMenuContainer .MenuColumnTitle img {outline: none; border: none;}\n\
							#SocialMenuContainer .MenuColumnTitle, #SocialMenuContainer .MenuColumnTitle a {font-size: 12px; color: #3b5997; text-decoration: none;}\n\
							#SocialMenuContainer .MenuColumnTitle, #SocialMenuContainer .MenuColumnTitle a {text-decoration: none;}\n\
							#SocialMenuContainer .MenuColumn .SocialLogo {float: left; position: relative; width: 141px; height: 30px; overflow: hidden;}\n\
							#SocialMenuContainer .MenuColumn .SocialLogo .SocialFacbook {position: absolute; left: 0; top: 0;}\n\
							#SocialMenuContainer .MenuColumn .SocialLogo .SocialTwitter {position: absolute; left: 0; top: -30px;}\n\
							#SocialMenuContainer .MenuColumn .SocialLogo .SocialFlickr {position: absolute; left: 0; top: -60px;}\n\
							#SocialMenuContainer .MenuColumn .SocialLogo .SocialYouTube {position: absolute; left: 0; top: -90px;}\n\
							#SocialMenuContainer .MenuColumn {float: left; position: relative; width: 197px; height: 240px; max-height: 100%; border-left: 1px solid #dedfe9;}\n\
							#SocialMenuContainer .MenuColumnSection {margin-top: 10px; padding-bottom: 10px; width: 197px;}\n\
							#SocialMenuContainer .MenuColumnSection ul {margin: 0 0; padding: 0 0; list-style: none;}\n\
							#SocialMenuContainer .MenuColumnSection ul li {padding: 0 5px; padding-left: 15px; width: 175px; line-height: 12px; text-align: left;}\n\
							#SocialMenuContainer .MenuColumnSection ul li a {font-size: 11px; font-weight: bold; color: #686868; text-decoration: none;}\n\
							#SocialMenuContainer .MenuColumnSection ul li a:hover {text-decoration: underline;}\n\
							#SocialMenuContainer .MenuColumnSpacer {border-bottom: 1px solid #dedfe9;}\n\
							#SocialMenuContainer .MenuTabsContainer {float: left; position: relative; width: 100%; padding-top: 20px; background: #eee;}\n\
							#SocialMenuContainer .MenuTabsContainer .MenuTabBTN {float: left; margin: 0 2px; position: relative; width: 160px; height: 30px; line-height: 30px; font-size: 14px; font-weight: bold; background: url(' + oEnvInfo.imgServer + '/images/gmcl_navigation/tab_off.gif); cursor: pointer; text-align: center; color: #686868;}\n\
							#SocialMenuContainer .BottomBar {float: left; position: relative; width: 100%; height: 55px; background: #ccc;}\n\
							#SocialMenuContainer #CloseSocialMenu {float: right; position: relative; margin-right: 20px; _margin-right: 20px; margin-top: 10px; padding: 0 10px; height: 25px; line-height: 25px; font-size: 12px; font-weight: bold; color: #3b5997; cursor: pointer;}\
							#SocialMenuContainer .Disclaimer {float: left; position: relative; width: 100%; height: 20px; z-index: 20000; margin-bottom:-10px; padding-top:8px;text-indent:10px; line-height: 20px; font-size: 12px; font-style:italic; color: #555; text-align: left; background: #fff;}';
				},
				
				/**
				* @function		getElement
				* @usage		Returns the xhtml elements for the Site Map Menu.
				*/
				getElement: function ()
				{
					var oDiv = document.createElement('div');
						oDiv.id = 'SocialMenuContainer';
						oDiv.className = 'SocialMenuContainer';
						
						oDiv.innerHTML = '<div class="MenuGradientBar">\
										  	<div class="GMLogoBTN"><a href="' + oEnvInfo.mainServer + '"><img style="border: none; outline: none;" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/gm_logo_footer.gif" /></a></div>\n\
											<div class="GMBTN"><a href="' + oEnvInfo.mainServer + '">' + (sLanguage == 'fr' ? 'VISITEZ L\'ACCUEIL GM >' : 'VISIT GM HOME >') + '</a></div>\n\
										  </div>\
										  <div class="MenuTabsContainer">\
										  	<div id="GMTab" class="MenuTabBTN">GM</div>\
											<div id="CHEVROLETTab" class="MenuTabBTN">CHEVROLET</div>\
											<div id="BUICKTab" class="MenuTabBTN">BUICK</div>\
											<div id="GMCTab" class="MenuTabBTN">GMC</div>\
											<div id="CADILLACTab" class="MenuTabBTN">CADILLAC</div>\
										  </div>\
										  ' + (sLanguage == 'fr' ? '<div class="Disclaimer">Ces sites ne sont disponibles qu\'en anglais.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>' : '') + '\
										  <div id="SocialMenuContentArea" class="MenuContentArea">\
										  </div>\
										  <div class="BottomBar">\
										  	<div id="CloseSocialMenu">' + (sLanguage == 'fr' ? 'Fermer X' : 'CLOSE X') + '</div>\
										</div>';
					
					return oDiv;
				},
				
				/**
				* @function 	getContainer
				* @usage		Returns the menu container object.
				*/
				getContainer: function ()
				{
					return document.getElementById('SocialMenuContainer');	
				},
				
				/**
				* @function		getContentArea
				* @usage		Returns the menu content object.
				*/
				getContentArea: function ()
				{
					return document.getElementById('SocialMenuContentArea');	
				}
			};
		
			/**
			* @note		Determine the language value for the menus. (document.cookie.match('(gmcanada_lang=french)') && document.cookie.match('(gmcanada_lang=french)').length > 0)
			*/
		var sLanguage = window.location.href.indexOf('/english/') != -1 || window.location.href.indexOf('lang=en') != -1 || window.location.href.indexOf('_code=en') != -1 || window.location.href.indexOf('/en/') != -1;
		var bLangCookie = false;	
			if (sLanguage)
			{
				sLanguage = 'en';
				if(document.cookie.match('(gmcanada_lang=english)') && document.cookie.match('(gmcanada_lang=english)').length > 0){
					bLangCookie = true;
				}
			}
			else if (window.location.href.indexOf('/french/') != -1 || window.location.href.indexOf('lang=fr') != -1 || window.location.href.indexOf('_code=fr') != -1 || window.location.href.indexOf('/fr/') != -1)
			{
				sLanguage = 'fr';
				if(document.cookie.match('(gmcanada_lang=french)') && document.cookie.match('(gmcanada_lang=french)').length > 0){
					bLangCookie = true;
				}
			}
			else if (document.cookie.match('(gmcanada_lang=french)') && document.cookie.match('(gmcanada_lang=french)').length > 0)
			{
				sLanguage = 'fr';
			}
			else
			{
				sLanguage = 'en';
			}
			
			if(!bLangCookie){
				var langLongForCookie = "english";
				if(sLanguage == "fr"){
					langLongForCookie = "french";
				}
				setCookie("gmcanada_lang",langLongForCookie, "", "/gm");
			}
			
			
			/**
			* @note		Locally global values.
			*/
		var sGlobalNavID = 'GlobalNav',
			oGlobalNavContainer,
			oHead = document.getElementsByTagName('head')[0],
			
			/**
			* @note		Determines the correct production environment.
			*/
			oEnv =
			{
				/**
				* @function		getInfo
				* @usage		Returns an object containing the environment values.
				*/
				getInfo: function ()
				{
					var sLoc = window.location.href,
							protocal = sLoc.indexOf('https://') != -1 ? 'https://' : 'http://',
							retObj;
							
							/**
							* @note		Possible location, itl, preprod, prodprev, localhost, and www.
							* 			www, is checked first because it is the most critical for performance.
							*/
							if (sLoc.indexOf('www.') != -1)
							{
								retObj =
								{
									mainServer: 'http://www.gm.ca',
									appServer: 'http://apps.gm.ca',
									appsSecureServer: 'http://apps.gm.ca',
									devPath: '',
									configDomain: 'http%3A%2F%2Fconfigurator%2Eautodata%2Egm%2Eca',
									PEDomain: 'http://paymentestimator.autodata.gm.ca',
									xmlGlobalNavDomain: protocal + 'www.gm.ca',
									imgServer : protocal + 'www.gm.ca'
								};
							}
							else if (sLoc.indexOf('itl.preview.') != -1)
							{
								retObj =
								{
									mainServer: 'http://itl.preview.tech.mminteractive.com',
									appServer: 'http://gm.ca',
									devPath: 'dev/',
									configDomain: 'http%3A%2F%2Fconfigurator%2Eautodata%2Eitl%2Egm%2Eca',
									PEDomain: 'http://paymentestimator.autodata.itl.gm.ca',
									xmlGlobalNavDomain: protocal + 'itl.preview.tech.mminteractive.com',
									imgServer : protocal + 'itl.preview.tech.mminteractive.com'
								};
							}						
							else if (sLoc.indexOf('itl.') != -1)
							{
								retObj =
								{
									mainServer: 'http://itl.gm.ca',
									appServer: 'http://apps.itl.gm.ca',
									appsSecureServer: 'https://apps.itl.gm.ca',
									devPath: 'dev/',
									configDomain: 'http%3A%2F%2Fconfigurator%2Eautodata%2Epreprod%2Egm%2Eca',
									PEDomain: 'http://paymentestimator.autodata.preprod.gm.ca',
									xmlGlobalNavDomain: protocal + 'itl.gm.ca',
									imgServer : protocal + 'itl.gm.ca'
								};
							}
							else if (sLoc.indexOf('preprod.preview.') != -1)
							{
								retObj =
								{
									mainServer: 'http://preprod.preview.tech.mminteractive.com',
									appServer: 'http://gm.ca',
									devPath: 'dev/',
									configDomain: 'http%3A%2F%2Fconfigurator%2Eautodata%2Epreprod%2Egm%2Eca',
									PEDomain: 'http://paymentestimator.autodata.preprod.gm.ca',
									xmlGlobalNavDomain: protocal + 'preprod.preview.tech.mminteractive.com',
									imgServer : protocal + 'preprod.preview.tech.mminteractive.com'
								};
							}							
							else if (sLoc.indexOf('preprod.') != -1)
							{
								retObj =
								{
									mainServer: 'http://preprod.gm.ca',
									appServer: 'http://apps.preprod.gm.ca',
									appsSecureServer: 'https://apps.preprod.gm.ca',
									devPath: 'dev/',
									configDomain: 'http%3A%2F%2Fconfigurator%2Eautodata%2Epreprod%2Egm%2Eca',
									PEDomain: 'http://paymentestimator.autodata.preprod.gm.ca',
									xmlGlobalNavDomain: protocal + 'preprod.gm.ca',
									imgServer : protocal + 'preprod.gm.ca'
								};
							}							
							else if (sLoc.indexOf('prod.preview.') != -1)
							{
								retObj =
								{
									mainServer: 'http://prod.preview.tech.mminteractive.com',
									appServer: 'http://gm.ca',
									devPath: 'dev/',
									configDomain: 'http%3A%2F%2Fconfigurator%2Eautodata%2Epreprod%2Egm%2Eca',
									PEDomain: 'http://paymentestimator.autodata.preprod.gm.ca',
									xmlGlobalNavDomain: protocal + 'prod.preview.tech.mminteractive.com',
									imgServer : protocal + 'prod.preview.tech.mminteractive.com'
								};
							}
							else if (sLoc.indexOf('localhost') != -1)
							{
								retObj =
								{
									mainServer: 'http://localhost',
									appServer: 'http://apps.gm.ca',
									appsSecureServer: 'http://apps.gm.ca',
									devPath: '',
									configDomain: 'http%3A%2F%2Fconfigurator%2Eautodata%2Egm%2Eca',
									PEDomain: 'http://paymentestimator.autodata.gm.ca',
									xmlGlobalNavDomain: protocal + 'www.gm.ca',
									imgServer : protocal + 'localhost'
								};
							}
							else
							{
								retObj =
								{
									mainServer: 'http://www.gm.ca',
									appServer: 'http://apps.gm.ca',
									appsSecureServer: 'http://apps.gm.ca',
									devPath: '',
									configDomain: 'http%3A%2F%2Fconfigurator%2Eautodata%2Egm%2Eca',
									PEDomain: 'http://paymentestimator.autodata.gm.ca',
									xmlGlobalNavDomain: protocal + 'www.gm.ca',
									imgServer : protocal + 'www.gm.ca'
								};
							}
							
							/**
							* @idea		concept
							* @note		We are returning an object literal to avoid many variables being passed around.
							*/
							return retObj;
					}
			},
			
			oEnvInfo = oEnv.getInfo(),
			
			/**
			* @note		Constructs the global navigation menu.
			*/
			oGlobalNavBuild =
			{
				/**
				* @note		Used for the IE6 fix for drop down menus.
				*/
				currentSection: null,
				
				/**
				* @function 	getCSS
				*/
				getCSS: function ()
				{
					return '#GlobalNav {position: absolute; top: 0; right: 0; width: 400px; z-index: 20000;}\n\
							#GlobalNav .GlobalNavMenu {clear: left; float: right; position: relative; height: 34px; z-index: 10000;}\n\
							#GlobalNav #SiteMapBTN {float: left; position: relative; width: 93px; height: 34px; overflow: hidden;}\n\
							#GlobalNav #SiteMapBTN .SiteMapBTNImg {float: left; position: relative; top: 0; left: 0; overflow: hidden; cursor: pointer;}\n\
							#GlobalNav #SocialMenuBTN {float: left; position: relative; width: 93px; height: 34px; overflow: hidden;}\n\
							#GlobalNav #SocialMenuBTN .SocialMenuBTNImg {float: left; position: relative; top: 0; left: -93px;; overflow: hidden; cursor: pointer;}\n\
							#divNavContainer ol,#divNavContainer ul {list-style: none;}\n\
							#divNavContainer {line-height: 1;}\n\
							' + (sLanguage == 'fr' ? '#GlobalNav #SiteMapBTN {width: 80px;}' : '') + '\n\
							#GlobalNav #SiteMapBTN .SiteMapBTNFrench {top: -68px;}\
							#GlobalNav .GMLogoBTN, #GlobalNav .GMBTN {float: left; position: relative; height: 34px; line-height: 34px;}\
							#GlobalNav .GMBTN a {color: #3b5997; font-weight: bold; font-size: 11px; text-decoration: none;}\n\
							#GlobalNav .GMBTN a:hover {text-decoration: underline;}';
				},
				
				/**
				* @function		getElement
				*/
				getElement: function ()
				{
					var oDiv = document.createElement('div');
						oDiv.className = 'GlobalNavMenu';
						
						oDiv.innerHTML = '<div id="SiteMapBTN">\
											<img id="SiteMapBTNImg" class="SiteMapBTNImg ' + (sLanguage == 'fr' ? 'SiteMapBTNFrench' : '') + '" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/nav_sprite.gif" />\
										</div>\
										<div id="SocialMenuBTN">\
											<img id="SocialMenuBTNImg" class="SocialMenuBTNImg" src="' + oEnvInfo.imgServer + '/images/gmcl_navigation/nav_sprite.gif" />\
										</div>\
										<div id="TopNavMenuContainer" class="MenuContainer">\
											<div id="NavMenuContentArea" class="MenuContentArea"></div>\
										</div>';
					
					return oDiv;
				},
				
				/**
				* @function		isBuildable
				* @usage		Determines whether the global can be built or not.
				*/
				isBuildable: function ()
				{
					oGlobalNavContainer = document.getElementById(sGlobalNavID);
					
					return typeof oGlobalNavContainer == 'object' && oGlobalNavContainer != null;
				},
				
				/**
				* @function		buildCSS
				* @note			Sets the CSS for the navigation menu.
				*/
				buildCSS: function (oMenu)
				{
					if (typeof oMenu == 'object')
					{
						var oStyle = document.createElement('style');
						
							oStyle.type = 'text/css';
		
							if(oStyle.styleSheet)
							{
								oStyle.styleSheet.cssText = oMenu.getCSS();
							}
							else
							{
								oStyle.appendChild(document.createTextNode(oMenu.getCSS()));
							}
							
							oHead.appendChild(oStyle);
					}
				},
				
				/**
				* @function		buildElement
				* @usage		Builds the elements for the menu in the Global Nav container object.
				*/
				buildElement: function (oMenu)
				{
					if (typeof oMenu == 'object')
					{
						oGlobalNavContainer.appendChild(oMenu.getElement());
					}
				},
				
				/**
				* @function		create
				* @usage		Constructs the menu.
				*/
				create: function (oMenu, bHover)
				{
					/**
					* @note		Construct the menu CSS by calling the buildCSS function.
					*/
					oGlobalNavBuild.buildCSS(oMenu);
					
					/**
					* @note		Construct the menu element by calling the buildElements function.
					*/
					oGlobalNavBuild.buildElement(oMenu);
					
					
					var oContentArea = oMenu.getContentArea(),
						
						/**
						* @note		data object for the menu.
						*/
						oData = oMenu.getData();
					
					/**
					* @note		Ensure data integrity before continuing.
					*/
					if (typeof oData == 'object' && oData != null)
					{
						for (var i = 0, l = oData.length - 1; i <= l; ++i)
						{
							/**
							* @note		Pass the column's data to the addColumn function to create the column object.
							*/
							oContentArea.appendChild(oGlobalNavBuild.addColumn(oData[i], bHover, i == l));
						}
					}
				},
				
				/**
				* @function		addColumn
				*/
				addColumn: function (oColumn, bHover, bBorder)
				{
					var oLanguageBlock,
						
						/**
						* @note		The column div element.
						*/
						oDiv = document.createElement('div'),
						
						/**
						* @note		The output string.
						*/
						sOutput = '',
						
						/**
						* @note		Variables used for menu creation.
						*/
						sValue,
						sURL,
						
						/**
						* @note		Server info object.
						*/
						oInfo = oEnv.getInfo(),
						
						/**
						* @note		The column element title or btn name.
						*/
						oTitle = (typeof oColumn.title == 'object' && typeof oColumn.title[sLanguage] == 'object') ? oColumn.title[sLanguage] : oColumn.title['en'],
						
						/**
						* @note		The rows of the column
						*/
						oRows = oColumn.rows;
						
						/**
						* @note		Set the Column class
						*/
						oDiv.className = 'MenuColumn';
						
						if (oColumn.bBorder)
						{
							oDiv.style.border = 'none';	
						}
						
						/**
						* @note		Check if a title exists for the column, and if so craete it.
						*/
						if (typeof oTitle == 'object')
						{
							sOutput += '<div ' + (typeof oColumn.title.id == 'string' ? 'id=' + oColumn.title.id : '') + ' class="MenuColumnTitle">' + (oColumn.title.bLink == true ? oTitle.value : '<a ' + (oColumn.title.bWindow == true ? 'target="_blank"' : '') + ' ' + (bBorder ? 'class="MenuTitleBorder"' : '') + ' ' + (typeof oTitle.url === 'string' ? 'href="' + (oColumn.title.bURL == true ? '' : oInfo.mainServer) + oTitle.url + '"' : '') + '>' + oTitle.value + '</a>') + '</div>';	
						}
						
						/**
						* @note		Create row blocks for each row. At the end, a separator is added if it is not the first and last block.
						*/
						if (typeof oRows == 'object')
						{	
							for (var i = 0, l = oRows.length - 1, oBlock, j, k, oRow; i <= l && (oBlock = oRows[i]) && typeof oBlock == 'object'; ++i)
							{
								sOutput += '<div class="MenuColumnSection"><ul>';
								
								/**
								* @note		Create the url;
								*/
								for (j = 0, k = oBlock.length; j < k && (oRow = oBlock[j]) && typeof oRow == 'object'; ++j)
								{
									
									/**
									* @note		Capture the language object.
									*/
									sValue = oRow[sLanguage];
								
									/**
									* @note		Default to english if the French value does not exist and is set by the URL.
									*/
									if (typeof sValue == 'object' && typeof sValue.value == 'string' && typeof sValue.url == 'string')
									{
										sURL = sValue.url;
										sValue = sValue.value;
									}
									else if (typeof oRow['en'] == 'object' && typeof oRow['en'].value == 'string' && typeof oRow['en'].url == 'string')
									{
										sValue = oRow['en'].value;
										sURL = oRow['en'].url;
									}
									else
									{
										sValue = '';
										
										/**
										* @note		Current page (".").
										*/
										sURL = '.';
									}
									
									sOutput += '<li>' + (oRow.bLink == true ? sValue : '<a ' + (oRow.bWindow == true ? 'target="_blank"' : '') + ' href="' + (oRow.bURL == true ? '' : oInfo.mainServer) + sURL +'">' + sValue  + '</a>') + '</li>';	
								}
								
								sOutput += '</ul></div>' + (i != l ? '<div style="float: left; margin-left: 10px; _margin-left: 5px; position: relative; width: 40px; height: 1px; display: block; border-top: 1px solid #dedfe9;"></div>' : '');
							}
						}
						
						/**
						* @note		Cycle through the data object and add the content to the ContentArea element.
						*/
						
						oDiv.innerHTML = sOutput;
						
						/**
						* @note		Accomodate IE6 fixes
						*/
						if ($.browser.msie && $.browser.version == 6.0)
						{
							if(bHover)
							{
								$(oDiv).hover(oGlobalNavBuild.IE6HoverOverFix, oGlobalNavBuild.IE6HoverOffFix);
							}
						}
						
						return oDiv;
				},
				
				/**
				* @function		IE6HoverOverFix
				*/
				IE6HoverOverFix: function (event)
				{
					/**
					* @note		The MenuColumnTitle is the target that should be returned from the hover affect by JQuery.
					*/
					var oTitle = event.target, oSection = oTitle.nextSibling;
						
						if (oTitle.className != 'MenuColumnTitle' && oTitle.className == 'MenuColumn' && oTitle.firstChild)
						{
							oSection = oTitle.firstChild.nextSibling;
						}
						
						if (oSection)
						{
							oSection =  oSection.style;
							
							oSection.display = 'block';
							oSection.visibility = 'visible';
							
							/**
							* @note		Set the currentSection property so the IE6HoverOffFix function can hide the element that was just displayed.
							*/
							oGlobalNavBuild.currentSection = oSection;
						}
				},
				
				/**
				* @function		IE6HoverOffFix
				*/
				IE6HoverOffFix: function ()
				{
					if (oGlobalNavBuild.currentSection)
					{
						oGlobalNavBuild.currentSection.display = 'none';
						oGlobalNavBuild.currentSection.visibility = 'hidden';
						oGlobalNavBuild.currentSection = null;
					}
				}
			};
			
			
			/**
			* @note		An interval is run to check for the GlobalNav element. If one exists, then it sets the menu and clears the interval.
			*			This is done to avoid using the onload window and dom functions.
			*/
			var iInt = 0, fInt = setInterval(function ()
			{
				/**
				* @note		If the menu has been searched for many times in this case 100, stop the interval.
				*/
				if (iInt == 100)
				{
					clearInterval(fInt);
				}
				
				/**
				* @note		Constructs the menu.
				*/
				if (oGlobalNavBuild.isBuildable())
				{
					/**
					* @note		Build the CSS for the global nav.
					*/
					oGlobalNavBuild.buildCSS(oGlobalNavBuild);
					
					/**
					* @note		Build the Element for the global nav.
					*/
					oGlobalNavBuild.buildElement(oGlobalNavBuild);
					
					/**
					* @note		Call the create function to make the menu.
					*/
					oGlobalNavBuild.create(oSiteMapNavMenu);
					
					/**
					* @note		Call the create function to make the nav menu.
					*/
					oGlobalNavBuild.create(oNavMenu, true);
					
					/**
					* @note		Build menu extra functionality.
					*/
					oSiteMapNavMenu.buildFunctionality();
					
					/**
					* @note		Call the create function to make the social menu.
					*/
					oGlobalNavBuild.create(oSocialMenu);
					
					/**
					* @note		Build menu extra functionality.
					*/
					oSocialMenu.buildFunctionality();
					
					
					/**
					* @note		Hover over Global Nav to set width that avoids covering anyting while not active.
					*/
					$('#GlobalNav').hover(function () {
						document.getElementById('GlobalNav').style.width = '990px';								
					},
					function ()
					{
					}, 2);
					
					clearInterval(fInt);

				}
				
				++iInt;
			
			}, 100);
	}) ();
