/*******************************************************************************
Version 11.8.5   GlobalNav.js - js functions for creating the globalnav
********************************************************************************/	 
	// function to move labels in and out of sign in inputs
	var IDToken1Val = 'User ID or Cell Phone Number';
	var IDToken2Val = 'Password';

	function inputSignIn(l,e){
		if(e.type == 'focus' && !l.value){
        	$(l).getPrevious('label').addClass('hideMe');
        }
		if(e.type == 'blur' && !l.value){
        	$(l).getPrevious('label').removeClass('hideMe');
        }
	}
	
	// empty func to prevent error if _hbLink is not defined later
	function _hbLink(e){}
	
	// define updateMenuURL if my verizon globalnav not included
	if(typeof(updateMenuURL) != 'function'){
		var updateMenuURL = function(id, url, newWindow){
			if(url!=null && url!='' && id!=null && $chk($(id))){
				$(id).setProperty('href', url);
			}
			if(typeof newWindow != 'undefined' && newWindow!=null && newWindow=="true"){
				$(id).setProperty('target', '_blank');
			}
		}
	}
	var beforeIE7 = false;
	function launchGlobalNav(){
		// move nav up 30px to hide top bar
		if(!gNav.getPageGlobal('topBarDisplay')){
			$('GlobalNavigation').style.marginTop = '-30px';
		}
		// override func defined in my verizon globalnav.js
		setSliderView = function(val){if(val =='H'){$('GlobalNavigation').style.marginTop = '-30px';}}

		// initializes our globalnav
		gNav.init()
		
		// this is a call to MyVerizon globalnav func that media store needs
		if(typeof(vgnCustomMenuFn) == 'function'){vgnCustomMenuFn()}
	}
	
	var gNav = {
		
  		//////////////////////////////////////////////////////////////////////
  		// Data 
  		// 
		codeVersion: '2011-05-19',
		// constants 
		searchText: 'Search',
		targetWindow: 'VZW',
		zipURL: '/b2c/zipEntry.jsp?go=/index.html&action=change',
		imagePath: '/globalnav/images/',
		nullObject: {},

		
		// defaults for global vars set on page. those not listed default to 1
		gnWebserver: '', // find this dynamically during init in getScriptSource()
		loggedInURL: 'https://login.verizonwireless.com:443/amserver/UI/Login',
		zipDisplay: '',
		cartStatus: '',
		multiAccount: '', // @26415
		rememberUserDisplay: '',
		menuType: '',
		cartWarning: '',
		rememberedUserName: '',
		signIn2: false,						// set to true if second signIn style should be displayed
		altLogInDisplay: false,				// controls where the login is placed
		
		// the accountType is default myvzw, and is changed to mybiz if myBusiness = 1
		myBusinessDisplay: '',
		accountTypeValueMyVZW: 'myvzw',
		accountTypeValueMyBiz: 'mybiz',
		accountType: 'myvzw',				// 'myvzw' or 'mybiz'
		accountTypeOnGroup: '',		 		// if an accountType was given on a group level in the data
											// for all items & children in a group
		accountTypeOnColumn: false,
		accountTypeOnRow: false,

		includeGomez: false,
		imgExt: '.png',
		
		thisScriptLocation: ['/globalnav/globalnav.js','/globalnav/temp/globalnav.js'],
		runningFromProduction: false, 		// if this script is running from cache.vzw.com or scache.vzw.com
		
		// for B2C pages, gn_category is set by /includes/nav/globalnav.jsp
		// other pages set this var directly
		// Here we map the value to which button is set to "active" 					
		categoryMap: [
						{catValue: 15, catBtnIdx: 0},
						{catValue: 20, catBtnIdx: 1},						
						{catValue: 25, catBtnIdx: 2},
						{catValue: 30, catBtnIdx: 3}
				],
					 	
		// file paths
		filenameVersion: 	'/globalnav/gnversion.txt',
		filenameProperties:	'/globalnav.txt',
		
		// location for the JSON menu data file ( from the prod js: menuFile:'/globalnav/globalnavmenu.txt' )
		filenameMenu: 		'/globalnav/globalnavmenu.txt',   
				
		// data file  related fields		
							
		jsonRequest_Version: null,  		// request object for gnVersion file
		versionDate: {},			  		// last publish date
				
		jsonRequest_Properties: null,  		// request object 
		jsonProperties: {},			  		// used for json properties file 
		domainTable:{"_empty_":""},			// a hash map of domain keys and values 
						
		jsonRequest_Menu: null,  			// request object 
		menuJSONData: {},			  		// used for menu data response
		menuVersion:'',						// from gnVersion.txt - date menu was last published 

		nextLanguage: 'es',					// the language link that is currently displayed - "go to Espanol" or English
		
		// timer data
		timerObject:{}, 					// used by timer routine 
		timerWaitPeriod: 50,	 			// retry timer value in msec
		timerRetryCount: 9,					// max number of data retries before giving up

		// the load routines use this array to know who to call next
		// since the data files must be loaded serially
		loadStepNumber: 0,                  // current index to executing function
		loadSequence: [],

		// The main div that is populated for each section
		navMainContainer: {},

		// for future use, if we ever process more than just signedOut				
		userRole:'signedOut',				// userRole: signedOut (default)
		
		// use this to generate a sequential ID in case one is not present in the data
		idSerial: 0,

		// default cart item in case one is not present in the json data
		cartNodeDefault: 	
						{
							"menuItem" : 
							{
								"label": "Cart",
								"hbx": "//global//cart",
								"role": 
								{
									"all" : 
									{
										"path" : "/b2c/store/controller?item=shoppingCartItem&action=viewShoppingCart",
										"domain" : "vzw"
									}
								}
							}
						},

		// Signin link node from the JSON file - used for both signin links
		signInLinkObject: {},
		signinWasGenerated: false,

		// menu data elements	@26416
		btnArray: [],			// this holds the button IDs and extra widths 		
		colArray: [],			// column IDs for all columns in the button groups
		totalMenuWidth: 970,	// constant
		menuColumnPadding: 40,	// left 20 + right 20
		
  		//////////////////////////////////////////////////////////////////////
  		// init - called first on Load
  		// 			
		init: function(){
			// see if this is IE before version 7, using both versions of mootools
			if((Browser.ie && Browser.version <7) || ($type(Browser.Engine) && Browser.Engine.trident && Browser.Engine.version <5) ){
            	beforeIE7 = true;
				gNav.imgExt = '.gif';
            }		
			
			// check if running in prod
			gNav.getScriptSource();

			// set up the sequence of data load functions
			gNav.addCommand(this.getProperties); 	// properties file globalnav.txt from root 
			gNav.addCommand(this.getVersion); 		// gnversion.txt - version timestamp, date last published 			this.addCommand(this.getProperties); 	// globalnav.txt - used in testing, not prod
			gNav.addCommand(this.getMenu); 			// globalnavmenu.txt json menu data
			
			// start the command chain
			gNav.startCommandChain();

		},
		
						
  		//////////////////////////////////////////////////////////////////////
		// getScriptSource - see if this script was executed from prod
				
		getScriptSource: function(){
			var done = false;
			var scriptSource = '';
			var scriptDomain = ''; 
			var collection = $$('script');
			
			for(i=0; i < collection.length; i++){
				scriptSource = collection[i].src;
				// if the script src is for this js file
				gNav.thisScriptLocation.each(function(item,index){
					pos = scriptSource.indexOf(item);
					if( pos > -1 ){
						scriptDomain = scriptSource.substring(0,pos);
						gNav.gnWebserver = scriptDomain;
						done = true;
					}
				});
				if(done)
					break;
			}
			
			// prod script comes from either  
			// http://cache.vzw.com or http://scache.vzw.com 
			if( scriptDomain.indexOf('://cache') > -1 || scriptDomain.indexOf('://scache') > -1 || scriptDomain.indexOf('verizonwireless.com') > -1) 	
				gNav.runningFromProduction = true;
			else
				gNav.runningFromProduction = false;

		},
								
 

  		//////////////////////////////////////////////////////////////////////
  		// getProperties 
		// Get the properties file - this is the globalnav.txt file that is 
		// used by QA on the test systems.	
		
		getProperties: function(){			

			// if running from prod, dont load the properties file
			if( gNav.runningFromProduction ){
				gNav.nextCommand();	
				return;
			}
	
			gNav.jsonRequest_Properties = 
				new Request({
						    url: 			gNav.filenameProperties,
							method: 'get',
							onSuccess: 	function(responseText){
								gNav.onSuccess_PropertiesData(responseText);
    						},
			                onFailure: function(){
								gNav.onFailure_PropertiesData();
			                } 
					}).send();		

		},

		onSuccess_PropertiesData: function(propertiesString){			
			// parse the data	
			gNav.propertiesData = propertiesString;	
			gNav.parseProperties(this.propertiesData);	
			// go to the next file		
			gNav.nextCommand();								
		},	

		// for this file, we don't care if it isn't loaded - just continue on. 
		onFailure_PropertiesData: function(){
			gNav.nextCommand();		
		},			
		
		
		//////////////////////////////////////////////////////////////////////
  		// getVersion 
		// Get the version timestamp of the menu file.  
		// The timestamp value is used as a cache buster, so if it has changed  
		// since the last one loaded, the browser will automatically load a new one,  
		// otherwise it will use the browser's cache which will save some time.
  		// Example: 2011Feb24025443		
		
		getVersion: function(){
			// set default value 
			gNav.menuVersion = '';			
			if(gnVersionCookieVal = Cookie.read('gnVersion')){
				gNav.menuVersion = gnVersionCookieVal;
				gNav.nextCommand();			// go to the next step
			}else{
				gNav.requestJSONPData( gNav.filenameVersion );
			}

		},
	

						
  		//////////////////////////////////////////////////////////////////////
		// Build a sctipt element with the src pointing to the url arg 
		// this will load a JSONP file. The file will contain the 
		// name of the callback function. 
				
		requestJSONPData: function(url){
			var src = gNav.gnWebserver + url;
			var fileref = document.createElement('script');
			fileref.setAttribute('type', 'text/javascript');
			fileref.setAttribute('src', src);
			if (typeof fileref!='undefined'){
			  document.getElementsByTagName('head')[0].appendChild(fileref);
			}
		},
		
		
		//////////////////////////////////////////////////////////////////////
  		// processVersionData 
		// This function is executed as a callback after the JSONP data is loaded.  		
		
		processVersionData: function(dataStream){
			gNav.menuVersion = dataStream;			// save the timestamp value	
			Cookie.write('gnVersion', dataStream); 	// save for next time
			gNav.nextCommand();						// go to the next step		
		},
	
		

  		//////////////////////////////////////////////////////////////////////
  		// getMenu
		// POST to get the menu data. Use the dateLastOublished (from gnVersion) 
		// as a cache buster. 	
		
		getMenu: function(){
			
			// look for alternate location of menu file in properties
			var menuFile = gNav.getPropObj('menuFile');
			if (menuFile) 
				gNav.filenameMenu = menuFile;
						
			// If the dateLastPublished is present, add it to the url
			var menuURL = gNav.filenameMenu;
			if( gNav.menuVersion != "" )
				menuURL += "?lpd=" + gNav.menuVersion;
				
			gNav.requestJSONPData(menuURL);
			
		},
		
						
  		//////////////////////////////////////////////////////////////////////
		// preview - called by Flex to preview a menu display 	
				
		preview: function(jsonDataStringFromFlex){
			gNav.menuJSONData = jsonDataStringFromFlex;
			gNav.buildNav();
		},
				
						
  		//////////////////////////////////////////////////////////////////////
		// restart - Delete everything and start over 	
				
		restart: function(){
			$('GlobalNavigation').innerHTML = "";
			gNav.buildNav();
		},

						
  		//////////////////////////////////////////////////////////////////////
		// buildNav - Build the menu and links, using the menu data 	
		
		buildNav: function(dataStream){
			
			// save the data
			gNav.menuJSONData = dataStream;
			
			// set vars for different menu types
			if( gNav.getPageGlobal('altLogInDisplay') ){
				gNav.signIn2 = true;
			}		
			
			// use flag value to set accountType 
			// this determines if the button says "My Verizon" or "My Business"
			// The data for each type is in the JSON file
			if( gNav.getPageGlobal('myBusinessDisplay'))
				gNav.accountType = gNav.accountTypeValueMyBiz;
			else
				gNav.accountType = gNav.accountTypeValueMyVZW;

			// get and save signIn node
			gNav.saveSignInLinkNode();
						
			// create the main container AND link to skip navigation	
			gNav.navMainContainer = new Element('DIV', {id:'navBGC', html:'<a href="#navEnd" name="navStart" title="skip navigation"></a>'});			

			// build the top left links
			if( gNav.getPageGlobal('lobDisplay') )
				gNav.buildCustomerTypeNavLinks();
			
			// build the top right links
			if( gNav.getPageGlobal('gLinksDisplay') )
				gNav.buildSecondaryNavLinks();

			// clear top nav
			div = new Element('div', {'class': 'topSpacer'});
			div.inject(gNav.navMainContainer);
		
			// build the logo 
			if( gNav.getPageGlobal('logoDisplay') ){
				gNav.buildLogo();
			}else{
				logo = new Element('div', {'class': 'logo'});
				logo.inject(gNav.navMainContainer);
			}
			
			// build the menu 
			if( gNav.getPageGlobal('gnDisplay') )
				gNav.buildMainNavLinks();
						
			// build signIn style 2 that replaces the search box 
			
			// if the signin link replaces the search box
			if ( gNav.signIn2 && gNav.signInLinkObject != gNav.nullObject) {
				
				if( eo = new gNav.createNavLink(gNav.signInLinkObject, 'regular  signIn2') ) {
					// add link image span for the little search dude
					span = new Element('span', {html: '&#160;'});
					span.inject(eo.getFirst('a'), 'bottom');
					// create new ul for this li 
					ul = new Element('ul', {'class': 'ul_signIn2'});
					eo.inject(ul);
					ul.inject(gNav.navMainContainer);
				}
			}
			
			// create and inject navigation end link
			navEnd = new Element('a', {'name':'navEnd','href':'#navStart','title':'back to navigation'});
			navEnd.inject(gNav.navMainContainer);		


			// build the search bar 
			if( !gNav.signIn2 ) {
				if( gNav.getPageGlobal('searchDisplay') )
					gNav.buildSearch();
						
			}
			
			// create and inject clearing div
			clearingDIV = new Element('DIV', {'class': 'clear'});
			clearingDIV.inject(gNav.navMainContainer);		
			
			// inject container div into global nav div
			$('GlobalNavigation').innerHTML = '';
			gNav.navMainContainer.inject($('GlobalNavigation'));			// NEED TO CHAGE THIS. NOT EVERYONE HAS THIS DIV!!!!!!!!!!

			// set active menu button 
			gNav.setActiveMenuButton();
			
			// create a div for the sign in overlays that will be on top of all other nav
			overlayDIV = new Element('DIV', {'id': 'overlayTop'});
			//overlayDIV.inject($('GlobalNavigation'),'bottom');

			// resize columns to spread the extra space around
			// objects in button array: {id: buttonID, space: perColumn}
			var buttonID = '';
			var columnID = '';
			var perColumn = 0;
			var newWidth = 0;
			if( gNav.btnArray && gNav.btnArray.length > 0 && gNav.colArray && gNav.colArray.length > 0 ) {
				
				for(var c=0; c<gNav.colArray.length; c++) {	
					
					columnID = gNav.colArray[c].id;
					
					if( columnID ) {
						
						buttonID = columnID.split("_", 1);
						perColumn = 0;
						
						for(var b=0; b<gNav.btnArray.length; b++) {	
						 	if( gNav.btnArray[b].id == buttonID ) 
								perColumn = gNav.btnArray[b].space;
						}
						
						if( perColumn > 30 ) {
							// note: getSize includes padding, width does not
							newWidth = $(columnID).getSize().x + perColumn - gNav.menuColumnPadding; 
							$(columnID).setStyle('width', newWidth); 
						}
					}					 
				}
			}	
				
			// GN integration guide dictates GN zIndex of 600. CIS pages use css of 9990
			if(location.pathname.substring(0,5) != '/b2c/')
				gNav.setGNZIndex(600);
			
			// The last thing we need to do is to call the customize menu function, if present
			if( $type(window.gnCustomizeMenu) )
				window.gnCustomizeMenu();
		},
	
	
  		//////////////////////////////////////////////////////////////////////
  		// buildCustomerTypeNavLinks 
		// The 3 links in the top left corner of the page	
		// Based on the customerTypeNavLinks section in the JSON doc
		
		buildCustomerTypeNavLinks: function(){	
		
			if( gNav.menuJSONData.customerTypeNavLinks === undefined ) 
				return;
		
			var eo = {}; // element object			
			var className;
										
			// create and inject top left
			var navBGCtopL = new Element('UL', {id: 'navBGCtopL'});		

			// loop thru the customerTypeNavLinks section of the JSON doc						
			gNav.menuJSONData.customerTypeNavLinks.each(function(item,index){
				
				classname = null;

				if( item.menuItem.label.toLowerCase() == 'wireless' && gNav.accountType == gNav.accountTypeValueMyVZW )
					classname = 'selected';
				else 
					if( item.menuItem.label.toLowerCase() == 'business' && gNav.accountType == gNav.accountTypeValueMyBiz )
						classname = 'selected';
							
				eo = new gNav.createNavLink( item, classname );
				if( eo != gNav.nullObject )
					eo.inject(navBGCtopL);
					
			});
			
			// inject the top left
			navBGCtopL.inject(gNav.navMainContainer);			
			
		},

		
  		//////////////////////////////////////////////////////////////////////
  		// buildSecondaryNavLinks 
		// The right-side glinks 	
		// Based on the SecondaryNavLinks section in the JSON doc
		
		buildSecondaryNavLinks: function(){	

			if( gNav.menuJSONData.secondaryNavLinks === undefined )
				return;

			var eo = {}; // element object	
			var className;
			gNav.accountTypeOnGroup = ''; 	// init
			gNav.accountTypeOnColumn = false; 
			gNav.accountTypeOnRow = false; 
						
			// create top right - glinks
			navBGCtopR = new Element('UL', {id: 'navBGCtopR'});
			
			// loop thru the right side glinks generating tags
				
			var baseClassName = 'regular';
			var labelName = '';
			var cartNode = null;		              	
			var zipNode = null;
										
			gNav.menuJSONData.secondaryNavLinks.each(function(item,index) {
				
				labelName = item.menuItem.label.toLowerCase();
	
				// if we find a cart node, save it					
				if( labelName.indexOf('cart') > -1 ) {
					cartNode = item;
				}		
 				else {
					// if we find a location node, save it	
					if( labelName.indexOf('location') > -1 ) {
						zipNode = item;		
					} 
					else {			
						// generate a new link item
	                	eo = new gNav.createNavLink( item, baseClassName );
						
						if( eo != gNav.nullObject ) {
							// for the English / Espanol node, 
							// save the language and add a click event	
							if( labelName.substring(0, 3) == 'esp' ||  labelName.substring(0, 3) == 'eng' ) {
								gNav.nextLanguage = labelName.substring(0, 2);
								eo.addEvent('click', gNav.changeLanguage);
								if(gNav.getPageGlobal('spanishDisplay')){
                                	eo.inject(navBGCtopR);	
                                }
							}else{
								eo.inject(navBGCtopR);		
							}						
						} 				
					}					
				}
			});		
				 
			// add link image span
			span = new Element('span',{html:'&#160;'});	
			span.inject(eo.getFirst('a'),'bottom');
			
			// create a location/zip link	
			if(gNav.getPageGlobal('zipDisplay')){
            	if(Cookie.read('CITY'))
					li = new Element('li', {html: '<a class="regular" onfocus="$(this).addClass(\'focus\')" onblur="$(this).removeClass(\'focus\')" href="'+ gNav.getDomain("vzw")+gNav.zipURL +'">'+  Cookie.read('CITY')+ ', ' + Cookie.read('STATE') +'</a>'});
				else 
					li = gNav.createNavLink( zipNode, baseClassName );						

				if( li  != gNav.nullObject ) 
					li.inject(navBGCtopR,'top');
            }

			// generate signIn
			// if we are placing the signIn link on the top
			if ( !gNav.signIn2 && gNav.signInLinkObject != gNav.nullObject) {
				eo = gNav.createNavLink(gNav.signInLinkObject, 'regular  signIn ');
				if( eo != gNav.nullObject )  {	
					gNav.signinWasGenerated = true;		
					if (gNav.getPageGlobal('logInDisplay')) {				
						eo.getFirst('a').addEvents({
							'focus': function() {signInGN.show(this,'show');},
							'mouseenter': function() {signInGN.show(this,'in');}
						});
					}
					eo.inject(navBGCtopR);
					// add link image to span tag (via css)
					span = new Element('span', {html: '&#160;'});
					span.inject(eo.getFirst('a'), 'bottom');
				}
			}
			
			
			// finally, generate the cart link
			// if not in json data, then generate using our default values
			if (gNav.getPageGlobal('cartStatus')) {
				if (cartNode == null) {
					eo = new gNav.createNavLink(gNav.cartNodeDefault, baseClassName + ' cart');
					if ( eo != gNav.nullObject ) {
						eo.inject(navBGCtopR);
						// add link image span
						span = new Element('span', {
							html: '&#160;'
						});
						span.inject(eo.getFirst('a'), 'bottom');
					}
				}
				else {
					// generate the cart link from json data
					eo = new gNav.createNavLink(item, baseClassName + ' cart');
					if (eo  != gNav.nullObject ) {
						eo.inject(navBGCtopR);
						// add link image span
						span = new Element('span', {
							html: '&#160;'
						});
						span.inject(eo.getFirst('a'), 'bottom');
					}
				}
			}
			
			navBGCtopR.inject(gNav.navMainContainer);			
			
			// if a signin link was generated, prep the dropdown 
			if( gNav.signinWasGenerated )
				signInGN.init();
				
		},


		//////////////////////////////////////////////////////////////////////
  		// changeLanguage - 
  		// This is called when the user clicks on "Espanol" or "English"
		changeLanguage: function(){
			
			if( gNav.nextLanguage == 'es' ) 
				gNav.switchLanguageFromEN('es');
			else 
				if( gNav.nextLanguage == 'en' ) 
					gNav.switchLanguageFromES('es');

			return false;
		},			

		switchLanguageFromEN: function(lang) {
			MP.SrcUrl=unescape('mp_js_orgin_url');
			MP.UrlLang='mp_js_current_lang'; //*dif*
			MP.init();
			MP.switchLanguage(MP.UrlLang==lang?'en':lang);
			return false;
		},
		
		switchLanguageFromES: function(lang) {
			MP.SrcUrl=unescape('mp_js_orgin_url');
			MP.UrlLang='es'; //*dif*
			MP.init(); // NOP
			MP.switchLanguage(MP.UrlLang==lang?'en':lang);
			return false;
		},
			
			
		//////////////////////////////////////////////////////////////////////
  		// saveSignInLinkNode - 
		saveSignInLinkNode: function(){
			gNav.signInLinkObject = gNav.nullObject;
			if (gNav.menuJSONData.signInLink !== undefined) {
				gNav.menuJSONData.signInLink.each(function(item, index){
					if ( item.menuItem.accountType == gNav.accountType ) 
						gNav.signInLinkObject = item;
				});
			}
		},

		
		//////////////////////////////////////////////////////////////////////
  		// buildLogo- Build the logo	
		buildLogo: function(){
	
		if(gNav.menuJSONData.logoLink === undefined){
        	var logoLabel = 'Verizon Wireless';
			var logoURL = gNav.getDomain('vzw')+'/b2c/index.html';
			var logoHbx = '//global//verizon+wireless';
			var logoID = 'gn11';
        }else{
        	var logoMenuItem = gNav.menuJSONData.logoLink[0].menuItem;
			var logoSignedOutObj = logoMenuItem.role.signedOut;
			var logoLabel = logoMenuItem.label;
			var logoURL = gNav.getDomain(logoSignedOutObj.domain)+logoSignedOutObj.path;
			var logoID = logoSignedOutObj.id;
			var logoHbx = logoMenuItem.hbx;
        }
			var s = gNav.gnWebserver;
			var logoImagePath = '<img class="leftAligned" src="' 
					+ s 
					+ gNav.imagePath 
					+ 'vz_logo'+ gNav.imgExt +'" alt="' + logoLabel + '" />';

			logo = new Element('a', {
				'id': logoID,
				'class': 'logo',
				'href': logoURL,
				'html': logoImagePath,
				'events':{
					'click':function(){
						_hbLink(logoHbx);
					}
				}
			});
			logo.inject(gNav.navMainContainer);
		},
		
		
  		//////////////////////////////////////////////////////////////////////
  		// buildMainNavLinks
		// Build the menu from the MainNavLinks section of the JSON doc	
		
		buildMainNavLinks: function(){

			if (gNav.menuJSONData.mainNavLinks === undefined) {
				// alert('no nav links in menu data to process');
				return;
			}
	
			var button = {}; // element object	
						
			// create the main nav list 
			navBGCmain = new Element('UL', {id: 'navBGCmain'});
			
			// loop thru the menu items
			
			gNav.menuJSONData.mainNavLinks.each(function(topLevel,index)
			{
				var buttonID = '';
				var columnUL = {};
				var defaultColumnWidth = 160;
				var totalColumnWidths = 0; 
				var numberOfColumns = 0; 
				
				gNav.accountTypeOnGroup = ''; 	// init
				gNav.accountTypeOnColumn = false; 
				gNav.accountTypeOnRow = false; 
								
				// create main nav buttons for accountType
				if(!$type(topLevel.menuItem.accountType) || topLevel.menuItem.accountType == gNav.accountType)
				{
					// make the menu button NP
					
					className = 'drop';
					
	  				var button = new gNav.createNavLink( topLevel, className );	
					buttonID = 'btn'+index; 
	  				button.id = buttonID;		
					
					button.addEvents({
						mouseover: function()
						{
							this.getFirst('div').style.zIndex = 9000;
							this.getFirst('div').style.display='block';
							this.getFirst('div').fade('in');
							gNav.activate(this.getFirst('a'),true);
							
							//put iframe mask behind dropdown for IE6 and before
							if(!this.getFirst('div').getElements('iframe').length && beforeIE7){
                            	adoptIframeMask(this.getFirst('div'));
                            }
						},
						
						mouseleave: function()
						{		
							this.getFirst('div').style.zIndex = 0;
							this.getFirst('div').fade('hide');
							this.getFirst('div').style.display='none';
							gNav.activate(this.getFirst('a'),false);
						}
					});

					button.getFirst('a').addEvents({
						'focus': function()
						{
							$('navBGCmain').getElements('.columns').each(function(item,index){
								item.style.zIndex = 0;
								item.fade('hide');
								gNav.activate(item.getParent().getFirst('a'),false);
							});
							
							this.getParent().getFirst('div').style.zIndex = 9000;
							this.getParent().getFirst('div').fade('show');
							gNav.activate(this,true);
							
							//put iframe mask behind dropdown for IE6 and before
							if(!this.getParent().getFirst('div').getElements('iframe').length && beforeIE7){
                            	adoptIframeMask(this.getParent().getFirst('div'));
                            }
						},
						
						'keydown': function(e)
						{
							if (e.key == 'right' && $chk(this.getParent().getNext())) {
								this.getParent().getNext().getFirst().focus();
							}
							if (e.key == 'left' && $chk(this.getParent().getPrevious())) {
								this.getParent().getPrevious().getFirst().focus();
							}
							// make sign in drop down dissapear
							if($chk($('loginMask'))){
								signInGN.hide();
								
							}
						}
					});
					
										
					// create a div for the menu columns 				
					var columnDIV =  new Element('div', {'class': 'columns shadow'} ); 

	                columnDIV.addEvents({
	                	mouseenter: function()
						{			
							this.style.zIndex = 100;
	                        this.fade('in');
	                        gNav.activate(this.getPrevious('a'),true);
	                    },
	                    mouseleave: function()
						{						
	                        this.style.zIndex = 0;
	                        this.fade('hide');
							this.style.display='none';
	                        gNav.activate(this.getPrevious('a'),false);
	                    }
					});
	
	   				/* 
						This is the data structure and the variable names 
					   	used for each level
					   					
	   				  topLevel.menuItem[].columns[].menuItem[].children[].menuItem[]
	           				button 
	           				label     
           							  column    
           					 					row (
   												 	menuitem label      										 
           										 		children
           														menuitem label
           														menuitem label
   															)
   												row (
           					 					 	menuitem label
           										 		children
           														menuitem label
           														menuitem label		
   												 			)	
           							  column    
           					 					row (
   												 	menuitem label      										 
           										 		children
           														menuitem label
           														menuitem label
   															)   												 															
	   				*/

										
					// Create a column div for each main menu button item 
					if (topLevel.menuItem.columns !== undefined) {
						
						totalColumnWidths = 0; 
						numberOfColumns = 0;						

						topLevel.menuItem.columns.each(function(column, columnIndex){
													
							var thisColumnWidth = defaultColumnWidth; 
							if (column[0] != undefined) {
								if (column[0].menuItem.width != undefined) {
									thisColumnWidth = (column[0].menuItem.width - gNav.menuColumnPadding);
								}
							}
							
							// count for later calc
							numberOfColumns++;
							totalColumnWidths += thisColumnWidth;

							var columnID = buttonID + '_col'+columnIndex;
							gNav.colArray.push( {id: columnID, width: thisColumnWidth} );							
														 	
							columnUL = new Element('ul', {
								id:		columnID,
								styles: {
									width: thisColumnWidth+'px'
								}
							});
							
							if (columnIndex) {
								columnUL.addClass('borderLeft')
							}

							// if there is an accountType value on this column, 
							// save its value to propagate down thru the rest 
							// of its child nodes. 
							if( $type(column[0].menuItem.accountType) ) {
								gNav.accountTypeOnGroup = column[0].menuItem.accountType; 
								gNav.accountTypeOnColumn = true; 
							}
							else {							
								gNav.accountTypeOnGroup = ''; 
								gNav.accountTypeOnColumn = false; 
							}
							
							// For each column, create a row with a link 
							
							column.each(function(row, index2){
							
								menuItemLI = new gNav.createNavLink(row);
								
								if ( menuItemLI != gNav.nullObject ) {
									
									var liCount = 0;

									// if indicator is not true already, check 
									// to see if we should turn it on for this level
									if( !gNav.accountTypeOnColumn ) {
										if( $type(row.menuItem.accountType) ) {
											gNav.accountTypeOnGroup = row.menuItem.accountType; 
											gNav.accountTypeOnRow = true;
										}
										else {
											gNav.accountTypeOnGroup = ''; 
											gNav.accountTypeOnRow = false;
										}	
									}
									
									// If this item has children, generate their links 
									if (typeof(row.menuItem.children) == 'object') {
										
										childUL = new Element('ul');
										
										row.menuItem.children.each(function(childItem, index3){
											childItemLI = new gNav.createNavLink(childItem);
											if( childItemLI != gNav.nullObject ) {
												childItemLI.inject(childUL);
												liCount++;
											}
										});
										
										if( liCount > 0 )
											childUL.inject(menuItemLI);
										
									}
									
									if (menuItemLI.inject !== undefined) 
										menuItemLI.inject(columnUL);
								}
							});
							
							columnUL.inject(columnDIV);
							
						});
											
						
					}  // all columns have been injected at this point
			
		
		  			// add the call to action link if present    
		  			if( topLevel.menuItem.ctaLink != undefined && (topLevel.menuItem.ctaLink[0].menuItem.accountType == gNav.accountType || !$type(topLevel.menuItem.ctaLink[0].menuItem.accountType))) {
						ctaItem = new gNav.createNavLink( topLevel.menuItem.ctaLink[0], 'callToAction' );
						span = new Element('span',{html:'&#160;'});	
						span.inject(ctaItem.getFirst('a'),'bottom');
		  				ctaItem.inject(columnDIV);
		  			}	
						
					// see if there is any extra space left over
					var marginPlusPadding = gNav.menuColumnPadding*numberOfColumns; 
					var unusedSpace = gNav.totalMenuWidth - (totalColumnWidths + marginPlusPadding);		
					var perColumn = Math.floor(unusedSpace/numberOfColumns);
					gNav.btnArray.push( {id: buttonID, space: perColumn} );
		
					// now inject the button
					columnDIV.inject(button);							
					button.inject(navBGCmain);
					
				}
				
			});

			// inject the menu into the main container				
			navBGCmain.inject(gNav.navMainContainer);
			
		},
		
		//////////////////////////////////////////////////////////////////////
  		// buildSearch
		// Build the search div
		buildSearch: function(){
			div = new Element('div',{'id': 'navSearch', 'html': '<label for="navSearchInput" class="hideLabel">Search for</label>'});
			inp = new Element('input',{
				'id': 'navSearchInput',
				'name': 'navSearchInput',
				'type': 'text',
				'value': gNav.searchText,
				'events': {
			        'focus': function(){
			            if(this.value == gNav.searchText){
	                    	this.value = '';
	                    }
						// get rid of any nav menus that opened by tabbing
						$('navBGCmain').getElements('.columns').each(function(item,index){
							item.style.zIndex = 0;
							item.fade('hide');
							gNav.activate(item.getParent().getFirst('a'),false);
						});
			        },
					'blur': function(){
			            if(!this.value){
	                    	this.value = gNav.searchText;
	                    }
			        },
					'keyup': function(e){
						if(e.key == 'enter'){
	                    	gNav.search();
	                    }
			        }
			    }
			});
			tntSearchDiv = new Element('div',{
				'id': 'tntSearchDiv',
				'styles':{
					'float':'left'
				}
			});
			but = new Element('a',{
				'id': 'navSearchButton',
				'html': 'go search',
				'href': 'javascript:gNav.search()'
			});
			
			inp.inject(div);
			
			but.inject(div);tntSearchDiv.inject(div);
			div.inject(gNav.navMainContainer);
		},
		
		search: function(){
			var str = escape($('navSearchInput').value);
			if(str && str.toLowerCase() != 'search'){
				_hbLink('search');
				location.href = gNav.getDomain('vzw')+'/b2c/store/B2CSearch?search=&q=' + str;
            }
		},
		
		activate: function(el,active){
			if(!$chk($('navArrow'))){
				div = new Element('div',{
					'class': 'arrow',
					'id': 'navArrow'
				});
				div.inject(el.getNext('div'),'top');
			}
			if(active){
				$('navArrow').inject(el.getNext('div'),'top')
				el.addClass('hover');
				coord1 = el.getParent('div').getCoordinates();
				coord2 = el.getParent('li').getCoordinates();
				newLeft = coord2.left + (coord2.width/2) - 10 - coord1.left;
				$('navArrow').setStyles({'left':newLeft});
            }else{
            	el.removeClass('hover');
            }
		},

  		
  		//////////////////////////////////////////////////////////////////////
  		// createNavLink - 
		// Generates an <li / <a  tag for nav links 
  
  		createNavLink: function(node, _className) 
  		{	

			// shorthand for vars
			var menuItem = node.menuItem;

			// if a group level accountType was given, it trumps what is on the  
			// local node, so check this one first
			if( gNav.accountTypeOnGroup != '' ) {
				if( $type(menuItem.accountType) && menuItem.accountType != gNav.accountTypeOnGroup )
					return gNav.nullObject;
			}		
			else {
				// if an accountType is present, it must match the one given to us
				if( $type(menuItem.accountType) ) {
					if( menuItem.accountType != gNav.accountType )
						return gNav.nullObject;
				}			
			}	
			
			// there might be a role that matches our userRole value
			var role = menuItem.role[gNav.userRole];
			// but if not, then just use 'all'		
			if( role === undefined ) 
				role = menuItem.role['all'];	

			// component parts of tag	
			var domain = '';
			var path = '';
			if (role !== undefined) {
				domain = gNav.getDomain(role.domain);
				path = role.path;
			}
			else 
				role = {};
			var href = domain + path;
			
			// If there is no ID present, generate one	
			var htmlID = ''; 
			if( role.id == undefined || role.id == '')
				htmlID = 'gNavGeneratedID_' + gNav.idSerial++;
			else 
				htmlID = role.id;
		
			var label = menuItem.label;
			
			
			// target and class vars
			var newWindow = '';
			var classString = '';
			var target = '';
			
			// set up the target property
			if (role.target != undefined) {
				if (role.target == "newWindow") {
					target = ' target="_blank" ';
					classString = 'newWindow ';
				}
				if (role.target == "newTab") {
					target = ' target="' + gNav.targetWindow + '" ';
					classString = 'newWindow ';
				}
			}

			// the default class is set in css
			// but if the caller wants a special class name, use it
			if( _className ) {
				classString += _className;
			}
			else if( menuItem.format != undefined ) {
				classString += menuItem.format;
			} 
			if(classString){
            	classString = ' class="' + classString + '"';
            }
			
			var onclick = ' onclick="_hbLink(\''+ menuItem.hbx +'\');';
				
			// check for cartWarning var (boolean)
			// if present, generate an onClick event instead of the href
			if(gNav.getPageGlobal('cartWarning')){
				onclick += 'if(typeof(abandonCart)==\'function\'){abandonCart(this,\''+href+'\');return false;}';
			}
			
			// check for signInReq parm (boolean) 
			// if present, generate an onClick event instead of the href
			if( typeof(role.signInReq) != 'undefined' ) {
				if( role.signInReq ) {
					onclick += ' signInDialog.__modifyGoTo(this.href);gNav.showSendLoginPopUp(); return false;';
				}
			}
			// business and wireless lob need click events too 
			if(label.toLowerCase() == 'business' ){
            	onclick += 'Cookie.write(\'mybizCookie\', \'true\');';
            }else if(label.toLowerCase() == 'wireless' ){
				onclick += 'Cookie.dispose(\'mybizCookie\');';
			}
			onclick += '"';

 			var onfocus = ' onfocus="$(this).addClass(\'focus\')"';
			var onblur = ' onblur="$(this).removeClass(\'focus\')"';
			
			if(menuItem.columns){// main nav needs image
            	imgName = label.replace(' ','').toLowerCase();
				label = '<img class="navImage" src="'+ gNav.gnWebserver + gNav.imagePath + imgName + gNav.imgExt +'" alt="'+ label +'" />';
            }
            
			// If nothing is in the href, just return

			if (href == '') 
				return gNav.nullObject;
            
			// assemble the component parts
			var e = new Element('li', {
				html: '<a id="'+ htmlID +'" href="'+ href +'" '+
				classString +
				target +
				onclick + 
				onfocus + 
				onblur + 
				' >' +
				label +
				'</a>'
			});
			
			return e;

  		},

		
  		//////////////////////////////////////////////////////////////////////
  		// setActiveMenuButton
		// Evaluates gn_category and sets menu button as active
		// the new values for the gn_category var are: 
		// 15 = Explore
		// 20 = Shop
		// 25 = My Verizon / My Business
		// 30 = Support
					
		setActiveMenuButton: function(){
			
			// Get the value in var gn_category, if any	
			var thisCat = window.gn_category;
			if ( thisCat != null && thisCat != '' ) {
				// use category value to find button to select
				for (var i = 0; i < gNav.categoryMap.length; i++) {
					if ( gNav.categoryMap[i].catValue == thisCat ) {
						$('navBGCmain').getElements('.drop')[gNav.categoryMap[i].catBtnIdx].addClass('selected');
						break;
					}
				}
			}
			
		},
		
	
	  	//////////////////////////////////////////////////////////////////////
  		// getDomain
		// Look up the domain key in properties (from globalnav.txt). 
		// If you don't find it there, then check JSON domainMap
  
	  	getDomain: function( key ) 
	  	{	
			var value = "";
			
			if( gNav.domainTable[key] )
				value = gNav.domainTable[key];
			else
				if( gNav.menuJSONData.domainMap !== undefined ) {
					if( gNav.menuJSONData.domainMap[key] )
						value = gNav.menuJSONData.domainMap[key];
				}		 
			return value;

  		},
		
				
  		//////////////////////////////////////////////////////////////////////
  		// Properties file functions - 
		// parsePropertiess parses the globalnav.txt file after it has been loaded.
		// getPropObj will return the property value for a given key
  	
		parseProperties: function(rawPropertiesData) 
		{
			// remove fluff 
			var parsedData = rawPropertiesData.replace(/ /g,"");
			parsedData = parsedData.replace(/[\r]/g,"");
			
			// split data into individual lines 
			var paramList = parsedData.split(/\n/);
			
			// for each line, split into key-value pairs
			
			var keyValPair = [];
			var testValue = "";
			
			for(i=0; i<paramList.length; i++)
			{
				var regexp = new RegExp("([^=]*)=(.*)");
				var arr = paramList[i].match(regexp);
				if (arr) {
					key = arr[1];
					value = arr[2];				


					// if both values are present
					if(key && value)
					{
						testValue = value + '';

						// drop any comments off the end of the line after data
						if(testValue.indexOf('/*') > -1) 
							testValue = testValue.substring(0, testValue.lastIndexOf('/*'));

						// add key-value to domain dictionary	
						gNav.domainTable[key] = testValue;
					}
				}
			}
		},

				
  		//////////////////////////////////////////////////////////////////////
  		// Properties file functions - 
		// parsePropertiess parses the globalnav.txt file after it has been loaded.
		// getPropObj will return the property value for a given key
				
		getPageGlobal: function(pageVar){
			if(eval('typeof('+pageVar+')') != 'undefined'){
			//if($type(eval(pageVar))){
				tv = eval(pageVar);
				if(tv=='false' || tv=='0'){
                   	return false
				}else{
                   	return tv;
				}
			//}else if(eval('typeof(gNav.'+pageVar+')') != 'undefined'){
			}else if($type(eval('gNav.'+pageVar))){
				return eval('gNav.'+pageVar);
			}else{
				return true;
			}
		},	

		getPropObj: function(key) { 
			return gNav.domainTable[key];
		},
	
		
 		//////////////////////////////////////////////////////////////////////
   		// addCommand, startCommandChain, nextCommand, repeatCommand 
 		// These functions handle the data loading command chain  
 		// We can't use mootools' command chaining here because 
 		// the data loads use callbacks.	
 		
 		addCommand: function(functionPointer){	
 			if( !gNav.loadSequence )
 				gNav.loadSequence = new Array();	
 			gNav.loadSequence[gNav.loadSequence.length] = functionPointer;
 		},	

 		startCommandChain: function(){	
			gNav.loadSequence[0]();
 		},	
		 		
 		nextCommand: function(){	
 			if( gNav.loadStepNumber < gNav.loadSequence.length ) {
				gNav.loadStepNumber++;	
 				gNav.loadSequence[gNav.loadStepNumber]();
			}
 		},	
 		
 		repeatCommand: function(){	
 			gNav.loadSequence[gNav.loadStepNumber]();
 		},					

		
			
		//////////////////////////////////////////////////////////////////////
		// retry timer
		
		timerSetup: function(){
			if( --gNav.timerRetryCount > 0 ) {
				// alert("timer started = " + gNav.timerRetryCount);
				gNav.timerIsRunning = true;
				gNav.timerObject = setTimeout( gNav.timerRetryCommand, gNav.timerWaitPeriod ); 	
			}	
			else {
				// alert("menu load failed. continuing on...");
				gNav.nextCommand();
			}
		},
		
		timerRetryCommand: function(){
			gNav.repeatCommand();	
		},
		
		timerClear: function(){
			// alert("timer cleared");
			gNav.timerIsRunning = false;
			clearTimeout( gNav.timerObject ); 		
		},		
		
		displayVars: function(){

			var output 	= "codeVersion: " + gNav.codeVersion + "\n"
						+ "gnDisplay: " + gNav.getPageGlobal('gnDisplay') + "\n"
						+ "topBarDisplay: " + gNav.getPageGlobal('topBarDisplay') + "\n"	
						+ "lobDisplay: " + gNav.getPageGlobal('lobDisplay') + "\n"
						+ "zipDisplay: " + gNav.getPageGlobal('zipDisplay') + "\n"
						+ "cartStatus: " + gNav.getPageGlobal('cartStatus') + "\n"	
						+ "gLinksDisplay: " + gNav.getPageGlobal('gLinksDisplay') + "\n"							
						+ "multiAccount: " + gNav.getPageGlobal('multiAccount') + "\n"
						+ "logInDisplay: " + gNav.getPageGlobal('logInDisplay') + "\n"													
						+ "altLogInDisplay: " + gNav.getPageGlobal('altLogInDisplay') + "\n"						
						+ "rememberUserDisplay: " + gNav.getPageGlobal('rememberUserDisplay') + "\n"
						+ "gn_category: " + gNav.getPageGlobal('gn_category') + "\n"
						+ "myBusinessDisplay: " + gNav.getPageGlobal('myBusinessDisplay') + "\n" 
						+ "accountType: " + gNav.getPageGlobal('accountType') + "\n";						
			alert(output);
		},

		// this i called by the sign in overlay 
		showSendLoginPopUp: function() {
			try {
				// call with no parms so it will use the goto var on the page
				signInDialog.render('');
			} catch(e) {}
		},

		breaker: function() {
			var s = "breaker";
		},
		
		setGNZIndex: function(zIndex){
		if($chk($('navBGCmain')))
			$('navBGCmain').setStyle('zIndex',zIndex+1);
		if($chk($('signinDD')))
			$('signinDD').setStyle('zIndex',zIndex+3);
		gNav.loginMaskZIndex = zIndex+2;
		gNav.signInListElementZIndex = zIndex+4;
	},


/* ******************************************************************************** */
	theLastFunctionInThisClassHasNoComma: function(){} 		
/* ******************************************************************************** */	
	}

//Version: '1.0.19' motionpoint start
	 
	var MP = {
		<!-- mp_trans_disable_start --> 
		  Version: '1.0.19',
		  Domains: {'es':'espanol.vzw.com'},		
		  SrcLang: 'en',
		<!-- mp_trans_disable_end -->
		  UrlLang: 'mp_js_current_lang',
		  SrcUrl: unescape('mp_js_orgin_url'),
		<!-- mp_trans_disable_start --> 	
		  init: function(){
		    if (MP.UrlLang.indexOf('p_js_')==1) {
		      MP.SrcUrl=location.href;
		      MP.UrlLang=MP.SrcLang;
		  }
		},
		switchLanguage: function(lang){
		  if(lang!=MP.SrcLang){
		    var script=document.createElement('SCRIPT');
		    script.src=location.protocol+'//'+MP.Domains[lang]+'/'+MP.SrcLang+lang+'/?1023749632;'+escape(MP.SrcUrl);
			document.body.appendChild(script);
		  } else if(lang==MP.SrcLang && MP.UrlLang!=MP.SrcLang){
		    var script=document.createElement('SCRIPT');
		    script.src=location.protocol+'//'+MP.Domains[MP.UrlLang]+'/'+MP.SrcLang+MP.UrlLang+'/?1023749634;'+escape(location.href);
			document.body.appendChild(script);
		  }
		  return false;
		},
		switchToLang: function(url) {
		    var mplink=document.createElement('A');
			if (mplink.click) { // using location.href will cause IE6 to not report referrer
				mplink.href=url;
		        document.body.appendChild(mplink);
		        mplink.click();
			} else {
			    location.href=url; 
			}
		}
		<!-- mp_trans_disable_end -->	
	};

	
	
//compensate for the selector problem in IE6 by masking it out via iFrame
	function adoptIframeMask(div){
	//alert($(div));
		iframeMask=new Element('iframe',{
			src:'javascript:false;document.write("");',
			'styles': {
				'width':(($(div).offsetWidth)-2) + 'px',
				'height':(($(div).offsetHeight)-1) + 'px',
				'position': 'absolute',
				'top': 0,
				'left': 0,
				'zIndex': -1
			}
		});	
		$(div).adopt(iframeMask);
	}
	
// ################# SIGN IN ###########################################################
	signInGN = {
		notBuilt: true,
		loggedInURL:'',
		personalLinks: {},
		mbloginURL:'',
		businessLinks: {},
		domains: {},
		rememberUserDisplayStyle: 'block',
		rememberUserDisplayValue: 'Y',
		rememberBoxChecked: '',
		rememberedUserName: '',
		userNameLabelClass: '',
		accountType: 'personal',
		goTo: '',
		displayed: false,
		
		init: function(){
			this.goTo = $type(window.goto)=='string' ? window.goto : ''; //should stay empty to land on the my verizon overview page
			this.loggedInURL = gNav.getPageGlobal('loggedInURL'),
			this.mbloginURL = gNav.getDomain('business'),
			
			this.domains.myverizon = gNav.getDomain('myverizon');
			this.domains.business = gNav.getDomain('business');
			this.domains.vzw = gNav.getDomain('vzw');
			this.domains.demo = gNav.getDomain('demo');
			
			this.personalLinks.forgotPW = this.domains.myverizon + '/accessmanager/public/controller?action=displayForgotPassword&lid=//global//sign+in+or+register//my+personal+account//forgot+password';
			this.personalLinks.forgotUserID = this.domains.myverizon + '/accessmanager/public/controller?action=displayForgotUserName&lid=//global//sign+in+or+register//my+personal+account//forgot+user+id';
			this.personalLinks.gnRegisterLink = this.domains.myverizon + '/accessmanager/public/controller?action=displayRegistration&goto='+ this.goTo +'&lid=//global//sign+in+or+register//my+personal+account//register';
			this.personalLinks.gnDemolink = this.domains.vzw + '/b2c/includes/vzDemoOverlay.jsp?lid=//global//sign+in+or+register//my+personal+account//view+demo';
			
			this.businessLinks.forgotPW = this.domains.business + '/sms/forgotPassword.go?lid=//global//sign+in+or+register//my+business+account//forgot+password';
			this.businessLinks.forgotUserID = this.domains.business + '/sms/forgotUsername.go?lid=//global//sign+in+or+register//my+business+account//forgot+user+id';
			this.businessLinks.gnRegisterLink = this.domains.business + '/tbmb/onlineEnrollShow.do?lid=//global//sign+in+or+register//my+business+account//register';
			this.businessLinks.gnDemolink = this.domains.demo + '/mybiz/media/flash/mybusinesspreview/index.html?lid=//global//sign+in+or+register//my+business+account//view+demo';
			
			if(!gNav.getPageGlobal('rememberUserDisplay')){
				this.rememberUserDisplayStyle = 'none';
				this.rememberUserDisplayValue = 'N';
			}
			if(gNav.getPageGlobal('rememberedUserName')){
				this.rememberBoxChecked = ' checked="checked"';
				this.rememberedUserName = gNav.getPageGlobal('rememberedUserName');
				this.userNameLabelClass = 'hideMe';
			}
			
			a = gNav.navMainContainer.getElements('a.signIn')[0];
			/*
			a.href = 'javascript:void(0);'
			a.target = null;
			*/
			div = new Element('div',{'id': 'signinDD', 'html': '<h2>Sign in to My Verizon</h2>', 'styles':{'display':'none'}});
			
			if(gNav.getPageGlobal('multiAccount')){
				div.innerHTML +=
				'<div class="clear10"></div><label for="perBusSelector" style="position:absolute;top:-100px;">Sign in to:</label>'+
				'<select id="perBusSelector" role="selector" onchange="signInGN.toggleAccount(this.selectedIndex)"><option>My Personal Account</option><option>My Business Account</option></select><div class="clear"></div>'+
				'<div id="businessLogin" style="position: relative;"><div class="clear10"></div><button class="reddButton leftAligned" title="Sign In" onclick="_hbLink(\'//global//sign+in+or+register//my+business+account//sign+in\');Cookie.write(\'mybizCookie\', \'true\');location.href=\''+ this.mbloginURL +'\'"><span><span>Sign In</span></span></button></div>';
			};

			div.innerHTML += 
				'<form id="signInForm" style="position: relative;" method="post" action="'+ this.loggedInURL +'" autocomplete="off">'+
		
				'<input type="hidden" name="goto" id="gotoID" value="'+ this.goTo +'"/>'+
				'<input type="hidden" name="realm" id="realmID" value="vzw"/>'+
				'<input type="hidden" name="gx_charset" id="gx_charset" value="UTF-8"/>'+
				'<input type="hidden" name="rememberUserNameCheckBoxExists" id="rememberUNameExistsGN" value="'+ this.rememberUserDisplayValue +'"/>'+
				
				'<label for="IDToken1_GN" class="signInInputLabel '+ this.userNameLabelClass +'">'+ IDToken1Val +'</label>'+
				'<input type="text" value="'+ this.rememberedUserName +'" onfocus="inputSignIn(this,event)" onblur="inputSignIn(this,event);" autocomplete="off" maxlength="60" name="IDToken1" id="IDToken1_GN" /><div class="clear"></div>'+
				'<label for="IDToken2_GN" class="signInInputLabel">'+ IDToken2Val +'</label>'+
				'<input type="password" onfocus="inputSignIn(this,event)" onblur="inputSignIn(this,event)" autocomplete="off" maxlength="20" name="IDToken2" id="IDToken2_GN" value="" /><div class="clear15"></div>'+
							
				'<div><span style="display:'+ this.rememberUserDisplayStyle +'"><input type="checkbox" class="checkboxx" value="Y" name="rememberUserName" id="rememberUserNameGN" '+ this.rememberBoxChecked +'><label for="rememberUserNameGN" class="label">Remember User ID</label></span>'+
				'<button type="submit" id="signInBut" title="Sign In" class="reddButton rightAligned" onclick="_hbLink(\'//global//sign+in+or+register//my+personal+account//sign+in\');Cookie.dispose(\'mybizCookie\');signInGN.butDisable();"><span><span>Sign In</span></span></button></div></form><div class="clear10"></div>'+
				
				'<a class="signInLinks" href="javascript:void(0);" id="forgotPW">Forgot Password</a><span class="signInTween">or</span>'+
				'<a class="signInLinks" href="javascript:void(0);" id="forgotUserID">User ID?</a><br />'+
				'<a class="signInLinks" href="javascript:void(0);" id="gnRegisterLink">Register</a><span class="signInTween">|</span>'+
				'<a class="signInLinks" href="javascript:void(0);" id="gnDemolink">View Demo</a>';
			
				div.getElements('a.signInLinks').each(function(item, index){
					if(item.innerHTML.test('Demo')){
                    	item.addEvents({
							keydown: function(e){
								if (['enter', 'space'].contains(e.key)) {
									signInGN.processLink(this, 'key', e);
								}
							},
							mouseup: function(e){
								signInGN.processLink(this, 'click', e);
							}
						});
                    }else{
                    	item.addEvents({
							click: function(e){
								signInGN.processLink(this, 'click', e);
							}
						});
                    }
					
				});
			
			// v31
			if( a !== undefined && a != null ){
				div.inject(a.getParent());
			}
							
			this.notBuilt = false;
			
		},
		
		hide: function(){
			$('loginMask').destroy();
			$$('a.signIn').removeClass('signInHover');
			$('signinDD').fade('hide');
			$('signinDD').setStyle('display','none');
			this.displayed = false;
		},
		
		show: function(a,how){
			if(this.displayed){
            	this.hide();
            }else{
				if(this.notBuilt){
	            	this.init();
	            }			
				if(!$chk($('loginMask'))){
					mask = new Element('div',{
						id: 'loginMask',
						styles: {
							background: 'white',
							opacity: 0.01,
							position: 'absolute',
							top:0,
							left:0,
							width: document.getScrollSize().x,
							height: document.getScrollSize().y
						},
						events: {
							click: function(){
								signInGN.hide();
							}
						}
					});
					a.getParent('li').grab(mask, 'before');
					a.getParent('li').addClass('signInListElement');
					
					// this is done if ASP needs to override zIndex
					if($type(gNav.loginMaskZIndex)){
						a.getParent('li').setStyle('zIndex',gNav.signInListElementZIndex);
						$('loginMask').setStyle('zIndex',gNav.loginMaskZIndex);
					}
					
					// IE6 and earlier need this for opacity
					if(beforeIE7){
	                	adoptIframeMask('signinDD');
	                }
					
					// change selected to business if on mybiz
					if(gNav.getPageGlobal('multiAccount')){
						if(gNav.accountType == 'mybiz'){
			            	signInGN.toggleAccount(1);
			            }else{
							signInGN.toggleAccount(0);
						}
					}
				}else{
					$('loginMask').style.display = 'block';
				}
				
				
				a.addClass('signInHover');
				if(userIdCookie = Cookie.read('userId')){
					$('IDToken1_GN').value = userIdCookie;
				}
				$('signinDD').setStyle('display','block');
				$('signinDD').fade(how);
				
				this.displayed = true;
			}
		},

		butDisable: function(){
			$('signInBut').addClass('disabledBtn');
		},
				
		toggleAccount: function(option){
		//alert(option);
			if(option){// this is business
            	this.accountType = 'business';
				$('businessLogin').setStyles({top:0, display:'block'});
				$('signInForm').setStyles({top:'-999px', display:'none'});
            }else{// this is personal
            	this.accountType = 'personal';
				$('businessLogin').setStyles({top:'-999px', display:'none'});
				$('signInForm').setStyles({top:0, display:'block'});
            }
			$('perBusSelector').selectedIndex = option;
		},
		
		processLink: function(obj, eventType, e){
			//event = new Event(event);
			var personalDemoTitle = 'My Verizon Demo';
			var personalWindowOptions = 'resizable,width=740,height=401';
			var businessWindowOptions = 'resizable,width=1003,height=601';
			var href = eval('signInGN.'+this.accountType+'Links.'+obj.id);
			if(href.test('&lid=')){
            	var splitter = '&lid=';
            }else{
            	var splitter = '?lid=';
            }
			href = href.split(splitter);

			if(obj.id == 'gnDemolink'){// demo link
			
            	_hbLink('view+'+this.accountType+'+demo');
				
				if(this.accountType == 'personal'){// personal:
                	if(eventType == 'click' && typeof(overlay)!='undefined'){// personal overlay layer
						viewDemo = true;//Setting this variable to true to handle incremental growth of the overlay in FF due to issues with the view demo video swf in library.js
						overlay.persistEvent(e);
						overlay.specialLaunch(null,obj,href[0]);
                    }
					else{// personal new window
						var vzwWindow = open(href[0], gNav.targetWindow, personalWindowOptions);
						vzwWindow.focus();
                    }
                }
				else{// business: new window
                	var vzwWindow = open(href[0], gNav.targetWindow, businessWindowOptions);
					vzwWindow.focus();
                }
            }
			else{// same window
            	_hbLink(href[1]);
				location.href=href[0];
            }
		},
	
	endClass_signIn:''}
	
	// ################# signInDialog CLASS ########################################################### 

/************************************************************** 
signInDialog Summary:

functions used in this class:

render(msg,specObj) (this function is called by non-B2C pages)

	=> renderOverlay()
	
	=> __renderOverlayIFrame()
	
	=> renderLoginContainer
	
		=> __renderSignInForm()
		
			( => __getDomain() removed and changed to point to new function in gNav class)



renderOverlay() 
	returns overlay DIV (class=overlay)

renderLoginContainer(hostDiv,msg,containerTitle)

closeLoginContainer()

__renderSignInForm()
 	returns signInForm

__signInMode()

__getRegister()
	
__rememberUserNameWrapper(thatChkBox,isChecked) {

__disableLBut() 
	
__setGotoFld()

__signInButtons()

__tabToBegin()
	
__renderOverlayIFrame(target)


External functions called:

gnDisableBut('signIn') - in globalnav.js


***************************************************************/
var signInDialog = {
	DIALOGTOP: 200,
	DIALOGWIDTH: 250,
	DIALOGCOL1WIDTH: 230,
	DIALOGCOL2WIDTH: 235,
	MODE: 'PERSONAL',
	CUSTOMHTML: '',
	specObj: {},
	//mp_trans_enable_start
	dialogTitle: 'My Verizon',
	signInLabel: 'Sign In',
	signInButtonLabel: 'Sign In',
	userIDLabel: 'User ID or Cell Number',
	userBIDLabel: 'User Name',
	passWordLabel: 'Password',
	perBusLabel: 'Sign in to:',
	rememberCkboxLabel: 'Remember User ID?',
	forgotPWLabel: 'Forgot Password?',
	forgotUserIDLabel: 'Forgot User ID?',
	registerLabel: 'Register',
	closeLabel: 'Close',
	learnMoreLabel: 'Learn More',
	narrTxt1: 'With My Verizon, you get the convenience of managing your account online including these great benefits:',
	narrTxt2: 'Check your minutes and messages',
	narrTxt3: 'Change or reset your Voice Mail password',
	narrTxt4: 'Purchase ringtones and manage Ringback Tones',
	narrTxt5: 'Access My Verizon on your mobile phone',
	bizTxt1: 'With My Business Account, you get the convenience of managing your account online including these great benefits:',
	bizTxt2: 'Pay bills and setup payment options',
	bizTxt3: 'Retrieve account data and place orders on your own schedule',
	bizTxt4: 'Request and manage products, services & phone repairs',
	bizTxt5: 'Eligible businesses can access all Wireless accounts',
	//mp_trans_enable_end
	//used by __getDomain()
	business: "http://b2b.verizonwireless.com",
	'vzw-secure': "https://www.verizonwireless.com",
	vzw: "http://www.verizonwireless.com",
	myverizon: "https://myaccount.verizonwireless.com",
	mblogin: "https://mblogin.verizonwireless.com",
	goTo: "",
	goToOverride: "",
	
	cleanup: function(mark) {
		if ($(mark)) {
			if ( beforeIE7 ) //this is IE6 specific garbage collection limitation
					$(mark).dispose(); 
			else
				$(mark).destroy(); 
		}
	},
		
	render: function(msg, specObj){
		
		exitGlobalNav = true;
		
		if (specObj) 
			this.specObj = specObj;
			
		this.CUSTOMHTML = msg;
		
		if ($type(window.loggedInURL) == false) 
			loggedInURL = 'https://login.verizonwireless.com:443/amserver/UI/Login';
			
		if ($type(window.goto)=='string') 
			this.goTo = window.goto;
		if (this.goToOverride){
			this.goTo = this.goToOverride;
			this.goToOverride = '';
		}
			
		$('navBGC').grab(this.renderOverlay(), 'before');
		

		if ( beforeIE7 )  {
			$('Overlay').adopt(this.__renderOverlayIFrame());
		}
		
		var pane = this.renderLoginContainer('GlobalNavigation', msg, this.dialogTitle);
		talk('Sign into your verhizon wireless account', 'IDToken1_OL');
		
		setTimeout("$('signInCloseBox').focus();",300);
	},
	
	
	renderOverlay: function(target){
		var x = window.getScrollWidth();
		var y = window.getScrollHeight();

		if ( beforeIE7 )  {
			x = window.getWidth();
		}		
		
		
		var Overlay = new Element('div', {
			'id': 'Overlay',
			'class': 'Overlay',
			'styles': {
				width: (x) + 'px',
				height: (y) + 'px'
			}
		});
		return Overlay;
	},
	
	
	renderLoginContainer: function(hostDiv, msg, containerTitle){
		//disable tabbing for all tabbed controls on the current page
		var inputs = document.getElementsByTagName('input');
		for (var i = 0; i < inputs.length; ++i) {
  		inputs[i].disabled=true;
		}

		left = window.getCoordinates().width/2 - this.DIALOGWIDTH;
		ttop = window.getCoordinates().height/2 - this.DIALOGTOP + window.getScroll().y;
		
		left = (left > 20) ? left : 20;
		ttop = (ttop > 20 + window.getScroll().y) ? ttop : 20 + window.getScroll().y;
		var login = new Element('div', {
			'id': 'dialogLogin',
			'class': 'dialogLogin',
			'styles': {
				left: left + 'px',
				top: ttop + 'px'
			}
		});
		$(hostDiv).adopt(login);
		var topWrap = {}; // new Rounder('headCurve', 'dialogLogin', 'top', 4, '1px', '', '#D1D1D1', '#FFFFFF', 0, true);
		var bodi = new Element('div', {
			'id': 'bodi',
			'class': 'contentContainer signIn'
		});
		var head = new Element('div', {
			'id': 'head',
			'class': 'overlayTop',
			'html': '<div><div><span class="overlayH1">' + containerTitle + '</span><a tabindex="1" id="signInCloseBox" href="javascript:signInDialog.closeLoginContainer()" onclick="_hbLink(\'close\');">Close</a> </div></div>'
		});
		
		// this does all the corner rounding
		//tl = new Element('div', {'id': 'TL','class': 'corners'});
		//tr = new Element('div', {'id': 'TR','class': 'corners'});
		bl = new Element('div', {'id': 'BL','class': 'corners'});
		br = new Element('div', {'id': 'BR','class': 'corners'});
		
		$('dialogLogin').adopt(head, bodi, bl, br);
		
		var titleContent = '<span><span><span><span>' + containerTitle + '</span></span><a id="signInCloseBox" class="close_primary" href="javascript:signInDialog.closeLoginContainer()" onclick="_hbLink(\'close\');">Close</a></span></span>';
		var title = new Element('span', {
			'html': titleContent
		});
		var botWrap = {}; // new Rounder('v1SignDialogBottom', 'dialogLogin', 'bottom', 6, null, '', '#D8D8D6', '#F0F0F0');
		
		$('bodi').adopt(this.__renderSignInForm());
		try {
			Lib.Bootstrapper.Tooltips.init();
		} 
		catch (e) {
			alog('tooltip ERROR')
		}
	},
	
	
	closeLoginContainer: function(){
		this.cleanup('dialogLoginF');
		this.cleanup('dialogLogin');
		this.cleanup('Overlay');
		this.specObj = {};
		
		var inputs = document.getElementsByTagName('input');
		for (var i = 0; i < inputs.length; ++i) {
  		inputs[i].disabled=false;
		}
	},
	
	__modifyGoTo: function(url){
		this.goToOverride = url;
		return false;
	},
	
	
	__renderSignInForm: function(){
		if (this.CUSTOMHTML) 
			var alertMsg = '<div id="dialogAlert">' + this.CUSTOMHTML + '</div>';
		else 
			var alertMsg = '<div id="dialogAlert" style="display:none"></div>';
		
		var authServerURL = loggedInURL; //personal is default

		var gotoTarget = this.goTo; //will be different if business
		
		if (this.specObj.LButURL) {
			gotoTarget = this.specObj.LButURL;
		}
		var token1Label = this.userIDLabel;
		
		
		// var accessManagerUserID=this.__getDomain('myverizon')+'/accessmanager/public/controller?action=displayForgotUserName';
		// var accessManagerPW=this.__getDomain('myverizon')+'/accessmanager/public/controller?action=displayForgotPassword';
		
		var domainMyVZW = gNav.getDomain('myverizon');
		
		var accessManagerUserID = domainMyVZW +
		'/accessmanager/public/controller?action=displayForgotUserName';
		
		var accessManagerPW = domainMyVZW +
		'/accessmanager/public/controller?action=displayForgotPassword';
		
		
		var selector = '<div class="clear5"></div><label for="login_select" id="signInSelectLabel"><strong>' + this.perBusLabel + '</strong></label><br />';
		selector += '<select tabIndex="4" id="login_select" class="gnavSignInSelect" onChange="signInDialog.__signInMode()" >';
		selector += '<option selected="selected" value="1">My Personal Account</option><option value="2">My Business Account</option></select>';
		var unameValu = '';
		var realmVal = 'vzw';
		var rememberValu = 'N';
		var rememberIsChecked = '';
		var userNameLabelClass = '';
		var fieldHandleForRememberUserName = 'rememberUserName';
		
		if (window.rememberedUserName) {
			unameValu = window.rememberedUserName;
			rememberValu = 'Y';
			rememberIsChecked = ' checked="checked"';
			userNameLabelClass = 'hideMe';
		}
		
		signInLabelLocal = this.signInLabel;
		var gotoField = '<input id="gotoGN" type="hidden" name="goto" value="' + gotoTarget + '"/>';
		var fx10 = '<div class="fixer_10"> </div>';
		var userName = '<label class="signInInputLabel '+ userNameLabelClass +'" for="IDToken1_OL">' + IDToken1Val + '</label>';
		userName += '<input tabIndex="2" id="IDToken1_OL" type="text" value="'+ unameValu +'" onfocus="inputSignIn(this,event)" onblur="inputSignIn(this,event)" name="IDToken1" maxlength="60" autocomplete="off"/>';
		userName += '<a style="float:right;" tabIndex="7" href="' + accessManagerUserID + '" onclick="_hbLink(\'forgot user id\');">' + this.forgotUserIDLabel + '</a><br />'
		var passWord = '<div class="clear"></div><label class="signInInputLabel" for="IDToken2_OL">' + IDToken2Val + '</label>';
		passWord += '<input tabIndex="3" id="IDToken2_OL" type="password" value="" onfocus="inputSignIn(this,event)" onblur="inputSignIn(this,event)" name="IDToken2" maxlength="20" autocomplete="off"/>';
		passWord += '<a style="float:right;"  tabIndex="8" href="' + accessManagerPW + '" onclick="_hbLink(\'forgot password\');">' + this.forgotPWLabel + '</a><div class="login_fetch">';
		signInButton = this.__signInButtons();

		var rememberUsername = '';
		var rememberUserIDchkboxlabel = '';
		var toolTip = '';
		var toolTipText = '';
		
		if (!window.multiAccount || this.specObj.hideMultiAccount == 'yes') {
			//ASPs do not have personal/business selector, remember functionality
			selector = '';
		}
		if ($type(window.rememberUserDisplay) == false) 
			window.rememberUserDisplay = "0";
		if (rememberUserDisplay == "1") {
			rememberUsername = '<input tabIndex="9" class="ruidcbFld" type="checkbox" ' + rememberIsChecked + ' id="rememberUserNameGN_OL" name="' + fieldHandleForRememberUserName + '" style="width:12px" onclick="javascript:signInDialog.__rememberUserNameWrapper(this,this.checked)";" value="' + rememberValu + '" />';
			rememberUserIDchkboxlabel = '<label for="rememberUserNameGN_OL" name="rememberUserIDchkboxlabel" class="ruidcbl">' + this.rememberCkboxLabel + '</label>';
			toolTip = '&#160;<a tabIndex="10" class="tooltip" href="javascript:void(null);">';
			toolTip += '<img style="position: relative;border:none; top:-1px;" alt="question mark" src="https://scache.vzw.com/images_b2c/shared/elements/question_mark.gif"/></a>';
			toolTipText = '<div class="tip">';
			toolTipText += '<p>"Remember User ID" stores your User ID on this computer. You should not use this feature on public computers (such as those in a library or internet cafe).</p></div>';
		}
		
		var learnMoreLink = gNav.getDomain('vzw-secure') + '/b2c/myaccount/selfserve.jsp';
		var textPrefix = 'narr';
		
		if (this.MODE == 'BUSINESS') {
			token1Label = this.userBIDLabel;
			var realmVal = 'vzwmb';
			if (window.mbuname) {
				unameValu = window.mbuname;
				if (window.rmmbcookieExists) {
					if (rmmbcookieExists == 'Y') {
						rememberValu = 'Y';
						rememberIsChecked = 'checked';
					}
				}
			}
			
			textPrefix = 'biz';		
			
			learnMoreLink = gNav.getDomain('vzw') + '/b2c/businessSolutions/mybiz/index.jsp';
			
			fieldHandleForRememberUserName = 'rememberMBUserName';
			
			// var authServerURL = this.__getDomain('mblogin') + '/amserver/UI/Login?realm='+realmVal;
			// var rBiz=this.__getDomain('business');
			
			var authServerURL = gNav.getDomain('business') + '/';
			var rBiz = gNav.getDomain('business');
			
			gotoTarget = rBiz + '/tbmb/login/perform.do';
			accessManagerUserID = rBiz + '/sms/forgotUsername.go?lid=Forgot%20User%20ID';
			accessManagerPW = rBiz + '/sms/forgotPassword.go?lid=Forgot%20Password';
			selector = '<label id="signInSelectLabel"><strong>Sign in to:</strong></label><br />';
			selector = '<select id="login_select" class="gnavSignInSelect" onChange="signInDialog.__signInMode()" >';
			selector += '<option value="1">My Personal Account</option><option selected="selected" value="2">My Business Account</option></select>';
			gotoField = '';
			userName = '<div class="clear10"></div><label id="signInSelectLabel"><strong>Sign in to:</strong></label>';
			passWord = '';
			signInButton = 	'<div class="fixer_10"> </div>'+
							'<button tabIndex="5" id="signIn" class="reddButton" title="Sign In" onclick="Cookie.write(\'mybizCookie\', \'true\');location.href=\''+ authServerURL +'\'">'+
							'<span><span>Sign In</span></span></button>'+
							'<div class="fixer_10"> </div>';
			var rememberUsername = '';
			var rememberUserIDchkboxlabel = '';
			var toolTip = '';
			var toolTipText = '';
			//signInLabelLocal = '';
		} //end BUSINESS ===========
		
		
		
		var hidFields = '<input id="realm" type="hidden" value="' + realmVal + '" name="realm"/>';
		hidFields += '<input id="gx_charsetGN" type="hidden" value="UTF-8" name="gx_charset"/>';
		//rememberUserNameCheckBoxExists may just be an artifact of the legacy design
		hidFields += '<input type="hidden" id="rememberUNameExistsGN" name="rememberUserNameCheckBoxExists" value="' + rememberValu + '" />';
		
		var registerBut = '<button tabIndex="12" id="SgnInRegisterBut" class="reddButton" onclick="_hbLink (\'register\');signInDialog.__getRegister()" title="Register" type="button" style="width:90px">';
		registerBut += '<span><span>' + this.registerLabel + '</span></span></button>';
				
		//payload
		var payload = '<table cellspacing="0" cellpadding="0" border="0" summary="this table is used for layout purposed only"><tbody><tr valign="top">';
		payload += '<td colspan="3">' + alertMsg + '</td></tr><tr>';
		//first column, fields
		payload += '<td style="padding: 0px 15px; width:50%; text-align: left; border-right:1px solid #CCC;">';
		payload += gotoField + hidFields;
		payload += '<div><strong>' + signInLabelLocal + '</strong></div>';// + fx10;
		
		payload += userName + passWord + selector + signInButton;
		payload += rememberUsername + '&#160;' + rememberUserIDchkboxlabel + toolTip + toolTipText;
		payload += '</td>';
		//second column, info
		payload += '<td style="padding:0 15px; width:50%; text-align:left">';
		payload += '<div class="siTitl"><strong>' + this.registerLabel + '</strong></p></div>' + fx10;
		payload += '<div class="signInRegister">' + eval('this.'+ textPrefix +'Txt1');
		payload += '<ul style="margin-left: 20px;padding:0px">';
		var t = '<li style="padding-bottom: 3px;">';
		var v = '</li>';
		payload += t + eval('this.'+ textPrefix +'Txt2') + v;
		payload += t + eval('this.'+ textPrefix +'Txt3') + v;
		payload += t + eval('this.'+ textPrefix +'Txt4') + v;
		payload += t + eval('this.'+ textPrefix +'Txt5') + v;
		payload += '</ul></div>';
		payload += '<a tabIndex="11" href="' + learnMoreLink + '" onclick="_hbLink(\'learn more\');">' + this.learnMoreLabel + '</a><br>';
		payload += registerBut;
		payload += '<a href="#" tabIndex="14" onFocus="signInDialog.__tabToBegin();" > </a>';
		payload += '</td>';
		payload += '</tr></tbody></table>';
		
		var signInForm = new Element('form', {
			id: 'signInForm',
			'html': payload,
			'method': 'post',
			'action': authServerURL,
			'autocomplete': 'off'
		});
		return signInForm;
	},
	
	svname:'',
	svpw:'',
	
	__signInMode: function(){
		//call onChange
		var login_select = $('login_select');
		if (login_select.selectedIndex == 1){
			this.svname = $('IDToken1_OL').value;
			this.svpw = $('IDToken2_OL').value;
			this.MODE = 'BUSINESS';
		}else{
			this.MODE = 'PERSONAL';
		}
		//this.cleanup('signInForm');
		$('bodi').innerHTML = '';
		$('bodi').adopt(this.__renderSignInForm());
		//restore info unless its remembered
		if(this.MODE == 'PERSONAL'){
        	if(this.svname){
				$('IDToken1_OL').value = this.svname;
				$('IDToken1_OL').getPrevious('label').addClass('hideMe');
			}
			if(this.svpw){
				$('IDToken2_OL').value = this.svpw;
				$('IDToken2_OL').getPrevious('label').addClass('hideMe');
			}
        }
		try {
			Lib.Bootstrapper.Tooltips.init();
		} 
		catch (e) {
			alog('tooltip ERROR')
		}
	},
	
	
	__getRegister: function(){
		if (this.MODE == 'BUSINESS')
			url = gNav.getDomain('mbss') + '/tbmb/onlineEnrollShow.do';
		else
			url = gNav.getDomain('myverizon') + '/accessmanager/public/controller?action=displayRegistration&goto='+gNav.getPageGlobal('goto');
		
		window.location = url;
	},
	
	
	__rememberUserNameWrapper: function(thatChkBox, isChecked){
		try {
			//set fields for post-submit processing
			var hidFld = $('rememberUNameExistsGN');
			var ckBox = $('rememberUserNameGN');
			if (isChecked) {
				hidFld.value = 'Y';
				ckBox.value = 'Y';
			}
			else {
				hidFld.value = 'N';
				ckBox.value = 'N';
			}
			//tracking
			//rememberUserNameHBX(thatChkBox);
		} 
		catch (e) {
		};
			},
	
	
	__disableLBut: function(){
		gnDisableBut('signIn');
		if ($('signIn2')) 
			gnDisableBut('signIn2');
		$('signInForm').submit();
	},
	
	
	__setGotoFld: function(){
		var url = this.specObj.RButURL;
		$('gotoGN').value = url;
		gnDisableBut('signIn2');
		gnDisableBut('signIn');
		$('signInForm').submit();
	},
	
	
	__signInButtons: function(){
		var fx10 = '<div class="fixer_10"> </div>';
		var LButLabel = this.signInButtonLabel;
		var LButWidth = '';
		var RButton = '';
		if (this.specObj.LButLabel) {
			LButLabel = this.specObj.LButLabel;
			//LButWidth = 'width:92px';
		}
		if (this.specObj.RButLabel) {
			var RButLabel = this.specObj.RButLabel;
			RButton = '<button tabIndex="6" id="signIn2" onclick="javascript:signInDialog.__setGotoFld();" class="reddButton" title="' + RButLabel + '" name="login" type="submit" style="width:105px">';
			RButton += '<span><span>' + RButLabel + '</span></span></button>';
		}
			
		var signInButton = fx10 + '<button tabIndex="5" id="signIn" class="reddButton" title="Sign In" name="login" onclick="_hbLink(\'sign in\'); Cookie.dispose(\'mybizCookie\');" type="submit" style="' + LButWidth + '">';
		// var signInButton = fx10 + '<button tabIndex="5" id="signIn" class="reddButton" title="Sign In" name="login" onclick="javascript:gNav.breaker()" type="submit" style="' + LButWidth + '">';
		signInButton += '<span><span>' + LButLabel + '</span></span></button>' + RButton + fx10;

		return signInButton;
	},
	
	
	__tabToBegin: function(){
		$('signInCloseBox').focus();
	},
	
	
	__renderOverlayIFrame: function(target){
		var x = window.getWidth();
		var y = window.getScrollHeight();
		var signInOverlayF = new Element('iframe', {
			id: 'signInOverlayF',
			'class': 'signInOverlayF',
			src: 'javascript:false;document.write("");',
			'styles': {
				width: (x) + 'px',
				height: (y) + 'px'
			}
		});
		return signInOverlayF;
	},
	
	
/* ******************************************************************************** */
END_OF_CLASS_signInDialog:''}	
/* ******************************************************************************** */
	

//Talk & accessibility functions

function talk(speech,nextFocus){
	access508Object.talk(speech,nextFocus);
}

var access508Object={
	nextFocus:'',
	MPFOCUSDELAY:100, //msec
	CLOSEMOTHDELAY:800, //msec
	focusMe: function(param) {
		if(param==0) return;
	},
	talk: function(speech,nextFocus){
		try {
		alog(speech);
		access508Object.nextFocus=nextFocus;
		$('GlobalNavigation').adopt(new Element('a', 
		{'id':'mouthPiece',
		'href':'in:',
		'html':speech,
		'events': {
						'blur': function(event){
							event.stop();
						},
						'focus':function(event){
								event.stop();
 						}        
	 	}
		}));

	//the setTimeout gives the window focus a chance to get thru ...
	setTimeout("$('mouthPiece').focus()",access508Object.MPFOCUSDELAY);
	//delay may need to be a bit larger for slower machines
	setTimeout("access508Object.closeMouthPiece()",access508Object.CLOSEMOTHDELAY);

	} catch(e){alog('talk err ' + e)}
	},
	closeMouthPiece:function(){
		/*
		try {
			if ($(access508Object.nextFocus)) 
	 			$(access508Object.nextFocus).focus();
		}catch(e){alog(e)}
		*/
		mark='mouthPiece';
		if ($(mark)) {
			if( beforeIE7 ) //this is IE6 specific garbage collection limitation
				$(mark).dispose(); 
			else
				$(mark).destroy(); 
		}
	}
}

function alog(str) { //append
  //alert(str);
  if ($('log'))
  	$('log').set('text',str + "; " + $('log').get('text') );
}

/* end of globalnav.js */


// START ADOBE SEARCH TEST & TARGET FUNCS
window.addEvent('domready',function() {
  var searchTextBoxId = 'navSearchInput';   // id of search text input field
  var mboxContainerId = 'tntSearchDiv';    // The id of the div element in the search form that the mbox will be injected into.
  var mboxName = 'searchParamMbox';

  function removeEventSimple(obj, evt, fn)
  {
      if (obj.removeEventListener)
          obj.removeEventListener(evt, fn, false);
      else if (obj.detachEvent)
         obj.detachEvent('on'+evt, fn);
  }

  function addEventSimple(obj, evt, fn)
  {
      if (obj.addEventListener)
          obj.addEventListener(evt, fn, false);
      else if (obj.attachEvent)
         obj.attachEvent('on'+evt, fn);
  }

  function setSearchFormMbox()
  { 
      if(typeof(mbox) != "undefined")
      { 
          mboxDefine(mboxContainerId, mboxName); 
          mboxUpdate('searchParamMbox'); 
          removeEventSimple(el, 'keydown', setSearchFormMbox);
      }
  }

  var el = document.getElementById(searchTextBoxId);
  if (el)
     addEventSimple(el, 'keydown', setSearchFormMbox);

});
// END ADOBE SEARCH TEST & TARGET FUNCS

