

/* Start Pop-up functions */

var openWins = new Array();
var nxPopUpDef = new Array();
nxPopUpDef["planDetails"] = new Array("global/popups/plan_details.php","scrollbars,height=500,width=605,top=0,left=0");
nxPopUpDef["updateCartQuantities"] = new Array("global/popups/updatecartquantities.php","scrollbars,height=300,width=385,top=0,left=0");
nxPopUpDef["phoneSelector"] = new Array("static/phone_selector_popup.php","scrollbars,height=255,width=390,top=0,left=0");
nxPopUpDef["phoneSelectorStore"] = new Array("dynamic/accessories/phone_selector_store_popup.php","scrollbars,height=255,width=390,top=0,left=0");
nxPopUpDef["tableBuilder"]  = new Array("/assets/tools/table_builder.html","scrollbars,resizeable,height=500,width=450,top=0,left=0");
nxPopUpDef["tableBuilderFull"]  = new Array("/assets/tools/table_builder_full.html","scrollbars,resizeable,height=750,width=850,top=0,left=0");
nxPopUpDef["printCart"] = new Array("/NASApp/onlinestore/Action/PrintCart","scrollbars,menubar,resizeable,height=750,width=850,top=0,left=0");
nxPopUpDef["generic3"] = new Array("global/popups/popups_generic.php","scrollbars,height=500,width=605,top=0,left=0");
nxPopUpDef["generic2"] = new Array("global/popups/popups_generic.php","scrollbars,height=500,width=410,top=0,left=0");
nxPopUpDef["generic1"] = new Array("global/popups/popups_generic.php","scrollbars,height=500,width=215,top=0,left=0");
nxPopUpDef["accPhonePopUp"] = new Array("/NASApp/onlinestore/Action/OSBrowseAccessoriesPhonePopup","scrollbars,height=255,width=390,top=0,left=0");
nxPopUpDef["findImeiPopup"] = new Array("/en/support/mynextel/imei_popup.shtml","scrollbars,height=500,width=410,top=0,left=0");
nxPopUpDef["findSimPopup"] = new Array("/en/support/mynextel/sim_popup.shtml","scrollbars,height=500,width=410,top=0,left=0");
nxPopUpDef["findImeiSimPopup"] = new Array("/en/support/mynextel/sim_popup.shtml","scrollbars,height=500,width=410,top=0,left=0");


function nxPopup(name,url,overWrite){
	var cnt = 0;
	var exists = true;
	var loc;
	var nm = "nx"+name+cnt;
	if(typeof overWrite == "undefined"){
		while(typeof openWins[nm] == "object"){
			cnt++;
			nm = "nx"+name+cnt;
		}
	}
	else{
		nm = "nx"+name;
		if(typeof openWins[nm] != "undefined"){
			openWins[nm].onunload = function(){}
		}
	}
	if((typeof url != "undefined")&&(url.length >0)){
		loc = url
	}
	else{
		loc = nxPopUpDef[name][0]
	}
	openWins[nm] = window.open(loc,nm,nxPopUpDef[name][1]);
	setTimeout("nxSetPopUnload('"+nm+"')",1000);
}

function nxSetPopUnload(name){
	if(openWins[name].document.body){
		if(isIE){
			eval('openWins["'+name+'"].document.body.onunload = function(){window.parent.nxRemPopup("'+name+'");}');
		}
		else{
			eval('openWins["'+name+'"].onunload = function(){window.parent.nxRemPopup("'+name+'");}');
		}
	}
	else{
		setTimeout("nxSetPopUnload('"+name+"')",1000);
	}
}

function nxRemPopup(name){
	if(typeof openWins[name] == "object"){
		delete openWins[name];
	}	
}

/* End Pop-up Functions */


// used for changing phone selection boxes in static pages
function phoneSelectorSwap(_obj,imgID,imageArray,changeImage){
	var sInd = _obj.selectedIndex;
	var sOpt = _obj.options[sInd].value;
	if(changeImage == true){
	   swap(imgID,imageArray[sInd].src);
	}
}



/* Start Global Promo Functions */

// functions to operate the expanding promos on pages
// Promos expand vertically to display text
// Subpromos type out the text.
// Subpromos always run after the promos are done and can be combined... open then type out
//
// DO NOT USE HTML IN SUB-PROMOS
// sub-promos should be empty <div></div> or <span></span> tags, any content within the tag will be removed


var promoTimer;
var promoID;
var currentPromo = "none";
var ht;
var subNum = 0;
var subContent;
var midOpen = false;  // tracks whether a promo is opening

// holds content for sub-Promos
// each sub-promo has 2 parts
// 1: the id of the element it should appear in
// 2: the content of the sub-promo
// example:
// spids[0] = new Array('subPromo3','Prices Below reflect your custom aisle discounts');
//
// remember to clear/change this list on pages in which you are opening multiple promos
// or the sub-promos will type out numerous times
var spids = new Array();
// "types out" the subPromo, should never have to explicitly call this function
// define spids to create sub-promos
function showSubPromos(count){
		if(subNum < spids.length){
			if (count <= spids[subNum][1].length){
				setInnerHTML(spids[subNum][0],spids[subNum][1].substr(0,count));
				count +=1;
				setTimeout("showSubPromos("+count+")",200);				
			}
			else{
				subNum++;
				setTimeout("showSubPromos(1)",200);				
			}
		}
		else{
			midOpen=false;
			subNum = 0;
		}
	}


// expands the current promo
// called from open Promo, do not call explicitly		
function growPromo(ht){
	if(promoID != "none"){
		htAll = getHeight(promoID+'Promo')+2;
		if (htAll <= ht){
			setHeight(promoID+'Promo',htAll);
		}
		else{
			clearInterval(promoTimer);
			currentPromo = promoID;
			if((spids)&&(spids.length >0)){
				setTimeout("showSubPromos(1)",200);
			}
			else{
				midOpen = false;
			}
		}
	}
	else{
		clearInterval(promoTimer);
		currentPromo = promoID;
		midOpen = false;
	}
}
	
// hides the current promo
// called from open Promo, do not call explicitly		
function hidePromo(ht){
	if(currentPromo != "none"){			
		if(getHeight(currentPromo+'Promo')>1){
			setHeight(currentPromo+'Promo',getHeight(currentPromo+'Promo')-1);
		}
		else{
			clearInterval(promoTimer);
			setDisplay(currentPromo+'Promo',"none");
			promoTimer = setInterval("growPromo(ht)",50);	
		}
	}
	else{
		clearInterval(promoTimer);
		promoTimer = setInterval("growPromo(ht)",50);	
	}
}


// Function used to control promos.  This is the only function you should call explicitly;
// The HTML structure for promos should have 2 <div>
// the outer <div> should have an ID that ends in Promo
// the inner <div> should have an ID that ends with PromoContent and starts with the same as the beginning of the outer <div>
// example:  <div id="myIDPromo"><div id="myIDPromoContent"></div></div>
// pid for the example would be myID
// to only run the defined sub-promos, call openPromo(null);
//
// only 1 promo can be opened at a time, 2 simultaneous calls to this function will result in errors
// to run 2 promos back to back, set a timeout long enough to open the first promo (3 seconds or so)
// then run the second promo
function openPromo(pid){
	if(pid == currentPromo){
		return
	}
	if(midOpen == true){
		clearInterval(promoTimer);
		if(currentPromo != "none"){
			setDisplay(currentPromo+'Promo',"none");
		}
		currentPromo = promoID;
	}
	window.scroll(0,0);
	promoID = pid;
	if(promoID != "none"){
		setDisplay(promoID+'Promo','block');
		setHeight(promoID+'Promo',1);
		ht = getHeight(promoID+'PromoContent');
	}
	else{
		ht=0;
	}
	midOpen = true;
	if(pid == null){
		if((spids)&&(spids.length >0)){
			setTimeout("showSubPromos(1)",200);
		}
	}
	else{	
		promoTimer = setInterval("hidePromo(ht)",50);		
	}
}

/* End Global Promo Functions */


/* Start Cookie Functions */

// Sets a Nextel Cookie
// parameters:
// name: cookie name
// valStr: complete cookie string (id||value^^id||value)
// persist: optional true/false on whether the cookie should be saved (true unless parameter is present and false)
//
// function will escape the value string
// expiration date is set to current date +1 year
// path is set to "/"
// domain is set to ".nextel.com"

function setNxCookie(name,valStr,persist){
	cookieStr = escape(valStr);
	dte = new Date();
	if((typeof persist != "undefined")&&(persist == false)){
		dte.setFullYear(dte.getFullYear()-1);
	}
	else{
		dte.setFullYear(dte.getFullYear()+1);
	}
	pth = "/";
	dmn = ".nextel.com";
	cookieStr += "; expires=" + dte.toGMTString();
	cookieStr += "; path=" + pth;
	if(document.location.href.indexOf(".nextel.com") != -1){
		cookieStr += "; domain=" + dmn;
	}
	document.cookie = name + "=" + cookieStr;
}


// gets the nextel cookie, stores the values in the nested associative array nxCookie[]
function getNxCookie(){
	var validCookies = "nxcommon;nolcustomaisletoken;customaislefilecookie;globalsuppressedaisle;smsession;indpage";
	var ck = unescape(document.cookie);
	var ckies;
	var indCk;
	var nvSet;
	var nvPair;
	if(ck.length >0){
		ckies = ck.split(';');
		for(x=0; x<ckies.length; x++){
			indCk = ckies[x].split('=');
			indCk[0] = indCk[0].toLowerCase().replace(/\s/,"")
			if(validCookies.indexOf(indCk[0]) > -1){
				if(indCk[1].indexOf("||") > -1){
					nxCookie[indCk[0]] = new Array();
					nvSet = indCk[1].split('||');
					for(y=0; y<nvSet.length; y++){
						if(nvSet[y].indexOf('^^') > -1){
							nvPair = nvSet[y].split('^^');				
							nxCookie[indCk[0].toLowerCase().replace(/\s/,"")][nvPair[0].toLowerCase().replace(/\s/,"")] = nvPair[1];
						}
					}
				}
				else{
					nxCookie[indCk[0].toLowerCase().replace(/\s/,"")] = indCk[1];
				}
			}
		}
	}
}

var nxCookie = new Array();
getNxCookie();

// deletes a cookie			
function deleteNxCookie(name){
	setNxCookie(name,"delete",false);
}
/* End Cookie Functions */	


/* Start Error Messaging functions */

// displays Nextel Error Messages
//
// parameters:
// errList: an array of the errors which have been caught (associative reference used in next parameter)
// errLog: associative array of all possible error messages.
// 			values in array should be ordered as: form name, form field name, label name, error message

function displayNextelError(errList){
	setDisplay('errorMessagingBox','block');
	var errMessages = "";
	var errHolder;
	restoreNxErrorFields()
	while(errHolder = errList.shift()){
		if(nxErrLog[errHolder].fieldName.indexOf(';;') > -1){
			var fields = nxErrLog[errHolder].fieldName.split(';;');
			for(y=0; y<fields.length; y++){
				setStyleText(eval("document."+nxErrLog[errHolder].fm+"."+fields[y]),nxErrLog[errHolder].fieldStyleText);
				setClass(eval("document."+nxErrLog[errHolder].fm+"."+fields[y]),"errorField");
			}		
		}
		else{
			setStyleText(eval("document."+nxErrLog[errHolder].fm+"."+nxErrLog[errHolder].fieldName),nxErrLog[errHolder].fieldStyleText);
			setClass(eval("document."+nxErrLog[errHolder].fm+"."+nxErrLog[errHolder].fieldName),"errorField");
		}
		if(nxErrLog[errHolder].labelId.indexOf(';;') > -1){
			var labels = nxErrLog[errHolder].labelId.split(';;');
			for(y=0; y<labels.length; y++){
				setClass(labels[y],"errorLabel");
			}		
		}
		else{
			setStyleText(nxErrLog[errHolder].labelId,"");
			setClass(nxErrLog[errHolder].labelId,"errorLabel");
		}
		errMessages += "<div class=\"dotList\">"+nxErrLog[errHolder].mess+"</div>\n";
	}
	setInnerHTML("errorMessagingList",errMessages);	
	window.scroll(0,0);					
}

function restoreNxErrorFields(){
	for(x in nxErrLog){
		if(nxErrLog[x].fieldName.indexOf(';;') > -1){
			var fields = nxErrLog[x].fieldName.split(';;');
			for(y=0; y<fields.length; y++){
				setClass(eval("document."+nxErrLog[x].fm+"."+fields[y]),nxErrLog[x].fieldSClass[y]);
				setStyleText(eval("document."+nxErrLog[x].fm+"."+fields[y]),nxErrLog[x].fieldStyleText[y]);
			}		
		}
		else{
			setClass(eval("document."+nxErrLog[x].fm+"."+nxErrLog[x].fieldName),nxErrLog[x].fieldSClass);
			setStyleText(eval("document."+nxErrLog[x].fm+"."+nxErrLog[x].fieldName),nxErrLog[x].fieldStyleText);
		}
		if(nxErrLog[x].labelId.indexOf(';;') > -1){
			var labels = nxErrLog[x].labelId.split(';;');
			for(y=0; y<labels.length; y++){
				setClass(labels[y],nxErrLog[x].labelSClass[y]);
				setStyleText(labels[y],nxErrLog[x].labelStyleText[y]);
			}		
		}
		else{
			setClass(nxErrLog[x].labelId,nxErrLog[x].labelSClass);
			setStyleText(nxErrLog[x].labelId,nxErrLog[x].labelStyleText);
		}
	}
}

// stores the values for error messages.
var nxErrLog = new Array();

function setNxErrLog(groupId,fmName,fieldName,labelId,message){
	nxErrLog[groupId] = new Object();
	nxErrLog[groupId].fm = fmName;
	nxErrLog[groupId].fieldName = fieldName;
	nxErrLog[groupId].labelId = labelId;
	nxErrLog[groupId].mess = message;
}



function saveNxFormFields(){
	for(x in nxErrLog){	
		if(nxErrLog[x].fieldName.indexOf(';;') > -1){
			var fields = nxErrLog[x].fieldName.split(';;');
			nxErrLog[x].fieldSClass = new Array();
			nxErrLog[x].fieldStyleText = new Array();
			for(y=0; y<fields.length; y++){
				nxErrLog[x].fieldSClass[y] = getSClass(eval("document."+nxErrLog[x].fm+"."+fields[y]));
				nxErrLog[x].fieldStyleText[y] = getStyleText(eval("document."+nxErrLog[x].fm+"."+fields[y]));
			}
		}
		else{
			nxErrLog[x].fieldSClass = getSClass(eval("document."+nxErrLog[x].fm+"."+nxErrLog[x].fieldName));
			nxErrLog[x].fieldStyleText = getStyleText(eval("document."+nxErrLog[x].fm+"."+nxErrLog[x].fieldName));
		}
		if(nxErrLog[x].labelId.indexOf(';;') > -1){
			var labels = nxErrLog[x].labelId.split(';;');
			nxErrLog[x].labelSClass = new Array();
			nxErrLog[x].labelStyleText = new Array();
			for(y=0; y<labels.length; y++){
				nxErrLog[x].labelSClass[y] = getSClass(labels[y]);
				nxErrLog[x].labelStyleText[y] = getStyleText(labels[y]);
			}
		}
		else{
			nxErrLog[x].labelSClass = getSClass(nxErrLog[x].labelId);
			nxErrLog[x].labelStyleText = getStyleText(nxErrLog[x].labelId);
		}
	}
}

/* End Error Messaging functions */



/* start Local nav Functions */

function sortLocalNavList(a,b){
	var aLev;
	var bLev;
	var a1 = -1;
	var a2 = -1;
	var a3 = -1;
	var b1 = -1;
	var b2 = -1;
	var b3 = -1;	
	if(localNavDef[a][0].indexOf('.') > -1){
		aLev = localNavDef[a][0].split(".");
		a1 = parseInt(aLev[0]);
		a2 = parseInt(aLev[1]);
		if(aLev.length == 3){
			a3 = parseInt(aLev[2]);
		}
	}
	else{
		a1 = parseInt(localNavDef[a][0]);
	}
	if(localNavDef[b][0].indexOf('.') >  -1){
		bLev = localNavDef[b][0].split(".");
		b1 = parseInt(bLev[0]);
		b2 = parseInt(bLev[1]);
		if(bLev.length == 3){
			b3 = parseInt(bLev[2]);
		}
	}
	else{
		b1 = parseInt(localNavDef[b][0]);
	}
	if(a1 > b1){return 1;}
	if(a1 < b1){return -1;}
	if((a2 > b2)||(b2 == -1)){return 1;}
	if((a2 < b2)||(a2 == -1)){return -1;}
	if((a3 < b3)||(a3 == -1)){return -1;}
	if((a3 > b3)||(b3 == -1)){return 1;}
	return 0;
}


function renderLocalNav(localNavID){
	if(localNavDef[localNavID] == null){
		document.writeln("There was an error in processing your request.  Navigation ID not found.");
		return;
	}
	var navID = localNavID + "";
	var idArray = new Array();
	var navLevels = navID;
	var baseNum = parseInt(localNavDef[navID][0]);
	var baseID = "";
	var clsID = "";
	var secNum = "";
	if(localNavDef[navID][0].indexOf('.') > -1){
		navLevels = localNavDef[navID][0].split(".");
		secNum = navLevels[0]+"."+navLevels[1];
	}
	var tier2Num = 0;
	var tier3Num = 0;
	
	for(x in localNavDef){
		if(localNavDef[x][0].indexOf(baseNum+".") == 0){
			idArray.push(x);
		}
		if(localNavDef[x][0] == baseNum+""){
			baseID +=x;
		}
	}
	idArray.sort(sortLocalNavList);
	document.writeln('<div class="moduleSpacer mod1Wid">\n');
	document.writeln('<div style="margin:0 10px 5px 10px"><a href="'+localNavDef[baseID][2]+'" class="blackBCText">'+localNavDef[baseID][1]+'</a></div>\n');
	document.writeln('<div class="hDotDivLight"><img src="/assets/images/spacer.gif"></div>\n');
	for(x=0; x<idArray.length;){
		navLevels = localNavDef[idArray[x]][0].split(".");
		var secID = idArray[x];
		document.writeln('<table cellpadding="0" cellspacing="0" style="margin:5px 10px;">\n');
		clsID = (navID == secID) ? "blackBText" : "greyBText";
		document.writeln('<tr><td valign="top" class="'+clsID+'">&gt;</td><td style="padding-left:3px;"><a href="'+localNavDef[secID][2]+'" class="'+clsID+'">'+localNavDef[secID][1]+'</a></td></tr>\n');
		document.writeln('</table>\n');
		var cnt = x+1;
		while((idArray[cnt]!=null) && (localNavDef[idArray[cnt]][0].split(".")[1] == localNavDef[idArray[x]][0].split(".")[1])){
			var t2ID = localNavDef[idArray[cnt]][0].split(".")[0]+"."+localNavDef[idArray[cnt]][0].split(".")[1];
			if(t2ID == secNum){
				var thID = idArray[cnt];
				clsID = (navID == thID) ? "blackText":"greyText";
				document.writeln('<div class="m5b" style="margin-left:25px;"><a href="'+localNavDef[thID][2]+'" class="'+clsID+'">'+localNavDef[thID][1]+'</a></div>\n');
			}
			cnt++;
		}	
		x = cnt;	
		
		document.writeln('<div class="hDotDivLight"><img src="/assets/images/spacer.gif"></div>\n');
	}
	document.writeln('</div>\n');
	localNavDef = new String();
}


function createLocalNavList(){
	var idArray = new Array();
	var optArray = new Array();
	for(x in localNavDef){
		var baseNum = parseInt(localNavDef[x][0]);
		if(arguments.length >0){
			for(y=0; y<arguments.length; y++){
				if(arguments[y].toString() == baseNum.toString()){
					idArray.push(x);
				}
			}
		}
		else{
			idArray.push(x);
		}		
	}
	idArray.sort(sortLocalNavList);
	
	for(x=0; x<idArray.length; x++){

		if(localNavDef[idArray[x]][0].indexOf(".") == -1){
			optArray.push(new Option(localNavDef[idArray[x]][0]+': '+localNavDef[idArray[x]][1],idArray[x],false,false));			
		}
		else{
			var lev = localNavDef[idArray[x]][0].split(".");
			if(lev.length == 2){
				optArray.push(new Option(localNavDef[idArray[x]][0]+':  -- '+localNavDef[idArray[x]][1],idArray[x],false,false));
			}
			else{
				optArray.push(new Option(localNavDef[idArray[x]][0]+':  -- -- '+localNavDef[idArray[x]][1],idArray[x],false,false));
			}
		}
	}	
	return optArray;
}


/* End local Nav Functions */




/**
       * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
       * http://javascript.internet.com
       */
      function checkEmail(emailStr) {
         if (emailStr.length == 0) {
             return true;
         }
         var emailPat=/^(.+)@(.+)$/;
         var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
         var validChars="\[^\\s" + specialChars + "\]";
         var quotedUser="(\"[^\"]*\")";
         var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
         var atom=validChars + '+';
         var word="(" + atom + "|" + quotedUser + ")";
         var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
         var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
         var matchArray=emailStr.match(emailPat);
         if (matchArray == null) {
             return false;
         }
         var user=matchArray[1];
         var domain=matchArray[2];
         if (user.match(userPat) == null) {
             return false;
         }
         var IPArray = domain.match(ipDomainPat);
         if (IPArray != null) {
             for (var i = 1; i <= 4; i++) {
                if (IPArray[i] > 255) {
                   return false;
                }
             }
             return true;
         }
         var domainArray=domain.match(domainPat);
         if (domainArray == null) {
             return false;
         }
         var atomPat=new RegExp(atom,"g");
         var domArr=domain.match(atomPat);
         var len=domArr.length;
         if ((domArr[domArr.length-1].length < 2) ||
             (domArr[domArr.length-1].length > 3)) {
             return false;
         }
         if (len < 2) {
             return false;
         }
         return true;
      }