
 /* Nextel is a global variable
 */
var Nextel = {} 

/**
 * Nextel.Assistant is a class that are used to managed expand, collapse and swp content of the global assistant bar
 * located at the bottom of the page 
 * @constructor
 **/
Nextel.Assistant = function () { this.init(); }

/**
 * Nextel.Assistant.Constants - all the pre-defined constants for Nextel.Assistant
 * @constant
 */
Nextel.Assistant.Constants = {
	MODULE_ID: "assistantModule",
	ICONS_ID: "rightIcons",
	COLLAPSED_HEIGHT: 40,
	EXPANDED_HEIGHT: 220,
	TOP_BAR_ID: "assistantTop",
	TOP_BAR_QM: "qm",
	ARROWS_ID: "arrows",
	ARROWS_DOWN_CLASS: "arrowsDown",
	COOKIE_NAME: "HomeFirstVisit",
	COLLAPSE_DELAY: 5000
};

function IEVersion(){	
	var version="NA";
	var ieDocMode="NA";
	var ie8BrowserMode="NA";
	if(/msie/i.test(navigator.userAgent) && (!window.opera)){
		if(window.attachEvent && window.ActiveXObject){	
			version = (navigator.userAgent.match( /.+ie\s([\d.]+)/i ) || [])[1];
			if(parseInt(version)==7){	
				if(document.documentMode){
					version = 8; 
					if(/trident\/\d/i.test(navigator.userAgent)){
						ie8BrowserMode = "8C";
					}else{
						ie8BrowserMode = "7";
					}
				}
			}else if(parseInt(version)==8){
				if(document.documentMode){ ie8BrowserMode = "8";}
			}
			ieDocMode = (document.documentMode) ? document.documentMode : (document.compatMode && document.compatMode=="CSS1Compat") ? 7 : 5;			   			
		}
	}
				 
	return {
		"BrowserMode" : ie8BrowserMode,
		"DocMode": ieDocMode
	}
}
				
				var docMode = IEVersion();
				var docuMode = docMode.DocMode;
				var browseMode = docMode.BrowserMode;
				if(browseMode=="7") {
					document.write('<link rel="stylesheet" type="text/css" href="/NextelApp/global/css/ie.css" />');
				} else if(browseMode=="8" && docuMode=="8") {
					document.write('<link rel="stylesheet" type="text/css" href="/NextelApp/global/css/ie8.css" />');
				} else if(browseMode=="8" && docuMode=="7") {
					document.write('<link rel="stylesheet" type="text/css" href="/NextelApp/global/css/ie.css" />');
				} else if(browseMode=="8C" && docuMode=="7") {
					document.write('<link rel="stylesheet" type="text/css" href="/NextelApp/global/css/ie.css" />');
				} else if(browseMode=="8C" && docuMode=="8") {
					
				}
				
				
function css_browser_selector(u){var ua=u.toLowerCase(),is=function(t){return ua.indexOf(t)>-1},g='gecko',w='webkit',s='safari',o='opera',m='mobile',h=document.documentElement,b=[(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3.5')?g+' ff3 ff3_5':is('firefox/3.6')?g+' ff3 ff3_6':is('firefox/3')?g+' ff3':is('gecko/')?g:is('opera')?o+(/version\/(\d+)/.test(ua)?' '+o+RegExp.$1:(/opera(\s|\/)(\d+)/.test(ua)?' '+o+RegExp.$2:'')):is('konqueror')?'konqueror':is('blackberry')?m+' blackberry':is('android')?m+' android':is('chrome')?w+' chrome':is('iron')?w+' iron':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?m+' j2me':is('iphone')?m+' iphone':is('ipod')?m+' ipod':is('ipad')?m+' ipad':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win'+(is('windows nt 6.0')?' vista':''):is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':'','js']; c = b.join(' '); h.className += ' '+c; return c;}; css_browser_selector(navigator.userAgent);

var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
	if (is_chrome){
	document.write('<link rel="stylesheet" type="text/css" href="/NextelApp/global/css/chromeStyle.css">');
}
				
Nextel.Assistant.prototype = {

	_maxHeight : 477, //Assistant Me max height
	_minHeight : 60, //Assistant Me min height
	_c : Nextel.Assistant.Constants,

	/**
	 * Attach events to different elements for Assistant Me bar to function properly.
	 * @function  
	 */
	init : function() {

	   
		//added to block the loading overlay during ManageAddress service call
		$("#loading").hide();
		//added for validate coverage
		$("#loading_validate_coverage").hide();
		//attach click and hover event to assistant bar. Also, attach hover event to the icons inside of Assistant Me bar
		collapseTo = "";
		$(".content li:first").show();
		$("#" + this._c.TOP_BAR_ID).bind("click", this.onAssistantClick);
		$("#" + this._c.TOP_BAR_ID).hover(
			function() {
				$("#"+Nextel.Assistant.Constants.MODULE_ID).toggleClass("active");
				$("#"+Nextel.Assistant.Constants.TOP_BAR_QM).toggleClass("active");
			},
			function() {
				$("#"+Nextel.Assistant.Constants.MODULE_ID).toggleClass("active");
				$("#"+Nextel.Assistant.Constants.TOP_BAR_QM).toggleClass("active");
			}
			
			
		);
		
		$('#inner_mail').click(function() {
  		var theUrl = $("#contactUsAssist").attr("href");	  		
		window.location.href = theUrl;
		});
	
		$('#siteSecurity').click(function() {
			var theUrl = $("#copyrightLink").attr("href");	  
	  		window.location.href = theUrl;
			});
		
		$("#" + this._c.ICONS_ID + " li").hover(
			function() {
				$(this).find("p:first").fadeIn("fast");
			},
			function() {
				$(this).find("p:first").fadeOut("fast");
			}
		);
		
		this.setAssistantInitialState();
		
		
		//attach click event to every button on the page that are associated with Assistant Me
		$(".switch").click(function(event) {
			event.preventDefault();
			if (this.opened) {
				this.opened = false;
				Nextel.Assistant.prototype.collapseAssistant();
			}
			else if ($(this).hasClass("loginAssitantBtn")) { //if button is on the login bar, it should collapse Asistant Me
				Nextel.Assistant.prototype.onAssistantClick();
			}
			else {
				Nextel.Assistant.prototype.swapContent($(this).attr("rel"));
				$(".switch").each(function() { this.opened = false; });
				this.opened = true;
			}
			return false;
		});
		
	
		$("#" + this._c.MODULE_ID).click(function() {
			return false;
		});
		
		/**when user click outside of Assistant Me, Assistant Me should collapse **/	
		$(window.document).click(function(event) {
			if(event.button != 2) { //not right click
				Nextel.Assistant.prototype.collapseAssistant();
			}
		});
		
		this.setContentToScroll(); 
		//add dynamic scroll bar
		
	
	//for clearing form fileds in sms Form 
	
	$('#closeSms , #SendAnotherDiv').bind('click',{},function(){
       $("#recipientPhoneId").val("");
        $("#smsMessageId").val("");
       });
	
		$("#smsDisplayScroll").bind('click',{},function(){
		window.scroll(600,650);
		});
		$("#closeSms").click(function()
			{ $("#smsWidget").fadeOut(300);} );
	
	//fix for sitemap hover
	$("#ihavetitle,#iwanthover").mouseover(function(){
    $(this).css("text-decoration","underline");
    }).mouseout(function(){
     $(this).removeAttr("style");

    });
			
	},
	
	/**
	 * This function will determine which page user is on and call the proper function for the initial state.
	 * @function
	 */	
	setAssistantInitialState : function() {
		//Check to see if this is homepage. If it is the homepage and first visit to the site
		//Assistant Me will open after page loaded.
		try {
			if (pageData != null) {
				switch(pageData.currentPage)
				{
					case 'homepage':
						if(this.getCookie(this._c.COOKIE_NAME)!=null &&  this.getCookie(this._c.COOKIE_NAME)!="")
						{						
							$("#" + this._c.MODULE_ID).css("height", this._c.COLLAPSED_HEIGHT + "px");
							$("#" + this._c.ARROWS_ID).removeClass(this._c.ARROWS_DOWN_CLASS);
							this.setCookie(this._c.COOKIE_NAME,false,30);
						} else {
							this.setCookie(this._c.COOKIE_NAME,false,30);
							this.initHomepage();
						}
						break;
					default:
						$("#" + this._c.MODULE_ID).css("height", this._c.COLLAPSED_HEIGHT + "px");
						$("#" + this._c.ARROWS_ID).removeClass( this._c.ARROWS_DOWN_CLASS );
						break;
				}
			}
		} catch(err) { ; }	
	},
	
	/**
	 * Sets a cookie and expiration date.
	 * @function
	 **/
	setCookie : function (c_name,value,expiredays) {
		var exdate=new Date();
		exdate.setDate(exdate.getDate()+expiredays);
		document.cookie=c_name+ "=" +escape(value)+
		((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
	},
	/**
	 * Checks if our cookie is set, returns "" if not otherwise returns the stored value.
	 * @function
	 **/
	getCookie : function (c_name) {
		if (document.cookie.length>0)
		  {
		  c_start=document.cookie.indexOf(c_name + "=");
		  if (c_start!=-1)
		    {
		    c_start=c_start + c_name.length+1;
		    c_end=document.cookie.indexOf(";",c_start);
		    if (c_end==-1) c_end=document.cookie.length;
		    return unescape(document.cookie.substring(c_start,c_end));
		    }
		  }
		return "";
	},
	
	/**
	 * If user is current on the homepage, expand Assistant Me, then Collapse after certain time. 
	 * @function 
	 */
	initHomepage : function() {
		$(window).load(function()
		{
			Nextel.Assistant.prototype.expandAssistant();
			collapseTo = setTimeout( function(){
									clearTimeout(collapseTo);
									Nextel.Assistant.prototype.collapseAssistant();
								} , Nextel.Assistant.Constants.COLLAPSE_DELAY );
		});
	},
	/**
	 * Create dynamic scroll bar if the content exceed pre-defined height in the Assistant Me content area. 
	 * @function
	 */
	setContentToScroll : function() {
		
		$("#" + this._c.MODULE_ID + " .content li:visible .scrolling").jScrollPane(
			{
				showArrows:true,
				scrollbarWidth: 14,
				dragMinHeight: 40
			}
		);
	},
	/**
	* Set javascript cookie after initial expand. The cookie will be used to determine whether 
	* or not to expand the Assistant Me.
	* @function
	***/
	setHomepageCookie : function() {
		var expirationDate = new Date();
		var __c = this._c.COOKIE_NAME + "=false;"
		document.cookie = __c;
	},
	/**
	 * This function get called after a user click on the Assistant Me bar.
	 * It will determine to expand or collapse Assistant Me bar based on the class name.
	 * @function
	 **/
	onAssistantClick : function() {
		clearTimeout(collapseTo);
		if( $("#" + Nextel.Assistant.Constants.ARROWS_ID).hasClass( Nextel.Assistant.Constants.ARROWS_DOWN_CLASS ) )
			Nextel.Assistant.prototype.collapseAssistant();
		else
			Nextel.Assistant.prototype.expandAssistant();
		return false;
	},
	/**
	 * This function changes the main content of Assistant Me based on the button that user clicks on.
	 * @param {String} target the id of the content that will be displayed.
	 * @function
	 */
	swapContent : function(target) {
		clearTimeout(collapseTo);
		$("#" + Nextel.Assistant.Constants.MODULE_ID + " .content li").each(function() { $(this).hide(); });
		$("#" + target).show();
		Nextel.Assistant.prototype.setContentToScroll();
		Nextel.Assistant.prototype.expandAssistant();
	},
	/** 
	 * This function expand Assistant Me. 
	 * @function
	 **/
	expandAssistant : function() {
		if( $("#" + this._c.MODULE_ID).css("height") == this._c.COLLAPSED_HEIGHT + "px" )
		{
			$("#" + this._c.MODULE_ID).animate({
				height: this._c.EXPANDED_HEIGHT + "px"
			}, 600, 'easeOutQuart', function(){ $("#" + Nextel.Assistant.Constants.ARROWS_ID).toggleClass( Nextel.Assistant.Constants.ARROWS_DOWN_CLASS ); });
		
		$("#assistantInnerTopRight").addClass('assActive');
			$("#" + this._c.MODULE_ID).addClass('assActive');
			$("#eu_posso").addClass("textRight3");
			$("#eu_posso").removeClass("textRight2");
		
		
		}
	},
	/**
	 * This function collapse Assistant Me.
	 * @function
	 **/
	collapseAssistant: function() {	
		$(".switch").each(function() { this.opened = false; });
		if( $("#" + this._c.MODULE_ID).css("height") == this._c.EXPANDED_HEIGHT + "px" )
		{
			$("#" + this._c.MODULE_ID).animate({
				height: this._c.COLLAPSED_HEIGHT + "px"
			}, 600, 'easeOutQuart', function(){ $("#" + Nextel.Assistant.Constants.ARROWS_ID).toggleClass( Nextel.Assistant.Constants.ARROWS_DOWN_CLASS ); });
		
		$("#assistantInnerTopRight").removeClass('assActive');
			$("#" + this._c.MODULE_ID).removeClass('assActive');
			$("#eu_posso").addClass("textRight2");
			$("#eu_posso").removeClass("textRight3");
		
		}
	}	
}

Nextel.Module = { }
/** 
 * Nextel.Module.Manager handles all the form validation and submission events. It also contains 
 * functionality to bind link to the half page promo.
 * @constructor
 **/
Nextel.Module.Manager = function() { this.init(); }
Nextel.Module.Manager.prototype = {
	
	MODULE_CLASS : "moduleCont", //promo module class
	MODULE_LINK : "moduleLink", //promo module link
	MODULE_CLASS_NEW: "moduleContNew", //promo module link new
	
	/**
	 * Call several functions to set events for different elements.
	 * @function
	 */
	init : function() {
		this.setModuleLink();
		this.setFormEvt();
		this.setSubmitBtnEvt();
	},
	
	/**
	 * Attach click event to the half page promo module, when user clicks on the
	 * box, it will take user to the link of the button.
	 * @function
	 */  
	setModuleLink : function() {
		$('.' + this.MODULE_CLASS).each(function(){
			$(this).bind('click', function(){
				var url = $(this).find('.' + Nextel.Module.Manager.prototype.MODULE_LINK + ":first").attr('href');
				if (url != null || url != '') {
					document.location = url;
				}		
			});
		});	
		$('.' + this.MODULE_CLASS_NEW).each(function(){
			$(this).bind('click', function(){
				var url = $(this).find('.' + Nextel.Module.Manager.prototype.MODULE_LINK + ":first").attr('href');
				if (url != null || url != '') {
					window.open(url);
				}		
			});
		});
	},
	
	/**
	 * Attach events to different form fields for formating
	 * @function
	 */ 
	setFormEvt : function() {
		
		this.setFieldEvt($('.customField input')); //set events for input fields
		this.setFieldEvt($('.customTextarea textarea')); //set sets for textarea fields
		
		if ($('select').length > 0) {
			this.createCustomSelect();
			$('.ui-selectmenu').bind('focus', function(){
				Nextel.Module.Manager.prototype.setFocusStyle(this);
			}).bind('click', function(){
				Nextel.Module.Manager.prototype.setFocusStyle(this);
			});
		}
	},
	
	
	
	/**
	 * Create a custom drop down list.
	 * @function
	 */
	createCustomSelect : function() {

                        $('select').each(function(index) {
                                    var the_select_fix = $(this).attr('id');
                                    if(the_select_fix!='BVRRFieldSelectReviewContextualDataFieldGenderID'&&the_select_fix!='BVRRFieldSelectReviewContextualDataFieldAgeID') {

                                                //alert(the_select_fix);

                                                $('#'+the_select_fix).selectmenu({style:'dropdown', maxHeight : 145, format : Nextel.Module.Manager.prototype.formatMultilineCustomSelect});
                                                
                                                $('.widget-wrap-inner').jScrollPane({
												scrollbarWidth: 7,
												scrollbarMargin:5,
												dragMinHeight: 40
											});
                                    }
                        });
	},
	/**
	 * Callback to format multiline select menus
	 * @function
	 */
	formatMultilineCustomSelect : function(text) {
		var newText = text;
		newText = newText.replace(/^([^\-]+) \- (.*)/g,'<span class="ui-selectmenu-item-header">$1</span> <span class="ui-selectmenu-item-text">$2</span>');
		newText = newText.replace(/^([^\\]+) \/ (.*)/g,'$1</span> <span class="ui-selectmenu-item-text">$2');
		return newText;
	},
	
	/**
	 * Attach mouseover, mouseout, focus, click, blur events to form fields for formatting.
	 * @param {Object} formFields form fields
	 * @function
	 */	
	setFieldEvt : function(formFields) {
		formFields.bind('mouseover', function(){
			Nextel.Module.Manager.prototype.addFieldStyle(this, 'inputFocus');
		}).bind('mouseout', function(){ //mouseout
			if (!this.isFocus) {
				Nextel.Module.Manager.prototype.removeFieldStyle(this, 'inputFocus');
			}
		}).bind('focus', function(){
			if ($(this).attr('id') == 'password_input') { //if the input field is password, swap the real password input field with the real one
				$(this).addClass('displaynone'); //hide element
				$('#password_real').removeClass('displaynone').focus(); //show fake password input
			}
			else {
				Nextel.Module.Manager.prototype.setFocusStyle(this);
			}
		}).bind('click', function(){ //click
			Nextel.Module.Manager.prototype.setFocusStyle(this);
		}).bind('blur', function(){ //blur
			this.isFocus = false;
			Nextel.Module.Manager.prototype.removeFieldStyle(this, 'inputFocus');
			Nextel.Module.Manager.prototype.resetDefaultTxt(this);
		})	
	},
	setFocusStyle : function(obj) {
	
		obj.isFocus = true;
		this.addFieldStyle(obj, 'inputFocus');			
		//this.removeErrorStyle(obj); //no error, remove error style
		//this.removeDefaultTxt(obj);	
	},
 	/**
	 * Reset an input or textarea field default text.
	 * @param {Object} inputField
	 **/
	 resetDefaultTxt : function(inputField) {
		//if the value is empty, reset to it's default text
		if ($(inputField).val() == '') {
			if ($(inputField).attr('id') == 'password_real') { //if the input field is password, swap the real password input field with the real one
				$(inputField).addClass('displaynone'); //hide element
				$('#password_input').removeClass('displaynone').val($('#password_input').attr('defaultTxt')); //show fake password input
			}
			else {
				$(inputField).val($(inputField).attr('defaultTxt')); //reset value to default text			
			}
		}		 
	 }, 
	/**
	 * This function remove default text of an input or textarea field.
	 * @param {Object} inputField
	 * @function
	 */
	 removeDefaultTxt : function(inputField) {
		var df = $(inputField).attr('defaultTxt');
		
		if (df != '' && df == $(inputField).val() ) {
			$(inputField).val('');
		}	 
	 },
	/**
	 * This function will add class to field object to create different style look based on current user event.
	 * @function
	 */
	addFieldStyle : function(obj, styleClass) {
		((obj.type).toLowerCase() == "textarea") ? $(obj).parent().parent().parent().addClass(styleClass) : $(obj).parent().addClass(styleClass);			
	},
	/**
	 * This function will remove class to field object to create different style look based on current user event.
	 * @function
	 */
	removeFieldStyle : function(obj, styleClass) {
		((obj.type).toLowerCase() == "textarea") ? $(obj).parent().parent().parent().removeClass(styleClass) : $(obj).parent().removeClass(styleClass);			
	},	
	
	/**
	 * Attach submit event to every form that is not using ajax.
	 * @function
	 */
	setSubmitBtnEvt : function() {
	
		$('form').not('.ajaxForm').each(function(){
				$(this).bind('submit', function(event){ //bind submit event
					event.preventDefault();
					Nextel.Module.Manager.prototype.submitForm(this);
				})
			
				var form = this;
				$(this).find('.htmlSubmit').bind('click', form, function(event){
				
					event.preventDefault();
					Nextel.Module.Manager.prototype.submitForm(form);
				});
		});	
	},
	
	
	
	
	
	
	/**
	 * This function will validate the form, if there's no error, then the form will get submitted 
	 * unless it's an ajax form.
	 * @param {Object} form the form that user has submitted.
	 * @returns {Boolean} is the form valid.
 	 * @function
	 */
	 
	 
	 
	 submitFinderForm:function(form) {
           try
           {
       		var seeError = false;
			var firstErrorField;
			var cep = document.getElementById('cep');
			var state = document.getElementById('state');			
			if(cep.value == "" && state.value=="select") {				
				seeError=true;
				Nextel.Module.Manager.prototype.removeErrorStyle(cep.parentNode);	
				Nextel.Module.Manager.prototype.addErrorStyle(state.parentNode);
				if (firstErrorField == null) {
					firstErrorField = cep;
				}
				
			}
			var tempCep;	
			if(cep.value != ""){
			var cepvalue= cep.value;
			cepvalue = $.trim(cepvalue);  
			var numericConstant = "0123456789";
			var finalCep = "";
			for(var i=0; i < cepvalue.length;i++)
			{
				var tempCep = cepvalue.charAt(i);
			
				if(!((tempCep == "-") || (tempCep == ".") || (tempCep == ",")))
				{
					
					finalCep = finalCep.concat(tempCep);
					
				}
			}
									
			if(isNaN(finalCep) == true || finalCep.length !=8)
			{
			
				seeError=true;				
			Nextel.Module.Manager.prototype.removeErrorStyle(state.parentNode);	
			Nextel.Module.Manager.prototype.addErrorStyle(cep.parentNode);
			if (firstErrorField == null) {
					firstErrorField = cep;
				}
			}
			
			
            }	   }
		
		catch(err){;}
				 
		if (!seeError) { //no error
			if (!$(form).hasClass('ajaxForm')) { //not ajaxform
				var btn = $(form).find('.hiddenSubmitbtn');
				btn.click();
				//form.submit(); //submit form
			}
			return true;
		}
	},

	 submitPostalcodeForm : function(form)
	  {
			var seeError = false;
			var firstErrorField;
			var cep = document.getElementById('cepField');
				
			if(cep.value == "" ) {		
				document.getElementById('errCEP').innerHTML=document.getElementById("emptyCheck").value;
				seeError=true;
			Nextel.Module.Manager.prototype.addErrorStyle(cep.parentNode);
				
				if (firstErrorField == null) {
					firstErrorField = cep;
				}
				
			}
			
			else
			{
			var cepvalue=cep.value;			
			var cepLenFlag = false;
			if(cepvalue.length == 5 || cepvalue.length == 8)
			{
				cepLenFlag = true;		
			
			}
			
			var isValid = cepvalue.match(/^[0-9]+$/) ? true : false;
			if(!isValid)
			{
			
				document.getElementById('errCEP').innerHTML=document.getElementById("numberCheck").value;
				seeError=true;
				Nextel.Module.Manager.prototype.addErrorStyle(cep.parentNode);
				if (firstErrorField == null) {
					firstErrorField = cep;
				}
			}else if(!cepLenFlag)
			{
				document.getElementById('errCEP').innerHTML=document.getElementById("errorCheck").value;
				seeError=true;
				Nextel.Module.Manager.prototype.addErrorStyle(cep.parentNode);
				if (firstErrorField == null) {
					firstErrorField = cep;
				}
			}
			else
			{}
			}
		if (!seeError) { //no error
	        
	        
			if (!$(form).hasClass('ajaxForm')) { //not ajaxform
				var btn = $(form).find('.hiddenSubmitbtn');
		
				btn.click();
				
				//form.submit(); //submit form
			}
			return true;
		}
		
	},
	

	 
	 submitNewsLetterForm : function(form)
	  {
	  
	    var requiredFields = $(form).find('.requiredField'); //find all required fields
		var seeError = false;
		var areaError = false;
		var area = document.getElementById("phoneField").value;
		var firstErrorField;
		for (var i=0, t=requiredFields.length; i<t; i++) {
		var field = requiredFields[i];
			var fieldVal = $(field).val();
			
			if (fieldVal == $(field).attr('defaultTxt') || this.validateField(fieldVal)) {	
				seeError = true;
				this.addErrorStyle(field); //see error style, add style
				if (firstErrorField == null) {
				firstErrorField = field;
				}
			}
			else if ($(field).hasClass("areaField")) {
				var isValid = fieldVal.match("(\\d{2})") ? true : false;
				if (!isValid) {
					seeError = true;
					areaError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
				else if(fieldVal < 11){
					seeError = true;
					areaError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}
				}
				else{
					this.removeErrorStyle(field); //no error, remove error style
				}
			}
			else if ($(field).hasClass("telefone")) {
				var isValid = fieldVal.match("(\\d{8})") ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
				else if(!this.validatePhoneField(fieldVal)){
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}
				}
				else{
				    if(area == "" || areaError){
				    seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}
				    }
				    else{
					this.removeErrorStyle(field); //no error, remove error style
					}
				}
			}
			else if ($(field).hasClass("emailField")) {
					var isValid = fieldVal.match(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i) ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				
				} else if(fieldVal.length < 7){
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}
				}
				else{
					this.removeErrorStyle(field); //no error, remove error style
				}
			}
			else if ($(field).hasClass("numberFieldCpf")) {
			fieldVal = $.trim(fieldVal);
				var isValid = (fieldVal.match(/^[0-9]+$/) && (fieldVal.length == 11 ||fieldVal.length == 14)) ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
				else if(!this.validateCpfField(fieldVal)){
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}
				}
				else{ 
						this.removeErrorStyle(field); //no error, remove error style
					}		
			}
			else if ($(field).hasClass("numberField")) {
				var isValid = (fieldVal.match(/^[0-9]+$/) && (fieldVal.length == 5 ||fieldVal.length == 8)) ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
				else 
				{
					this.removeErrorStyle(field); //no error, remove error style
				}
				
			
			}
			else 
			{
				this.removeErrorStyle(field); //no error, remove error style
			}
		}
		if (!seeError) { //no error
	
			if (!$(form).hasClass('ajaxForm')) { //not ajaxform
				var btn = $(form).find('.hiddenSubmitbtn');
		
				btn.click();
				
				//form.submit(); //submit form
			}
			return true;
		}
		
	},
	 
	
	 submitContactUsForm : function(form)
	  {
			
		var requiredFields = $(form).find('.requiredField'); //find all required fields
		var seeError = false;
		var firstErrorField;
		for (var i=0, t=requiredFields.length; i<t; i++) {
			var field = requiredFields[i];
			var fieldVal = $(field).val();
			if ($(field).hasClass("alphaField")) 
			{
				if ($(field).hasClass("mandatoryField") && (fieldVal == $(field).attr('defaultTxt') || this.validateField(fieldVal)))
				{
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
					firstErrorField = field;
					}
				}
				else{
					if(!this.validateField(fieldVal)){					
					//var isValid = "abc";	
					var isValid = fieldVal.match(/^[a-zA-Z0-9-,. `#]/) ? true : false;
						if (!isValid)
						{	
							seeError = true;
							this.addErrorStyle(field); //see error style, add style
							if (firstErrorField == null) {
								firstErrorField = field;
							}
						}
						else{ 
							this.removeErrorStyle(field); //no error, remove error style
						}
					}
				}
			}
			else if ($(field).hasClass("companyField"))
			{					
					if(!this.validateField(fieldVal)){					
					//var isValid = "abc";	
					var isValid = fieldVal.match(/^[a-zA-Z0-9-,. `£#]/) ? true : false;
						if (!isValid)
						{	
							seeError = true;
							this.addErrorStyle(field); //see error style, add style
							if (firstErrorField == null) {
								firstErrorField = field;
							}
						}
						else{ 
							this.removeErrorStyle(field); //no error, remove error style
						}
					}				
			}
						
       		   else if ($(field).hasClass("deptField")) {
			
			   var dept = document.getElementById('whichDepartment');	
		       var dept_nc = document.getElementById('whichDepartment_nc');
			
			   if($("#clientCheck").val() == "false")
			   {
			   		if($(".clientStatus input[name=qTypeClient]:checked").val() === "notClient" || $(".clientStatus .custom-radio label[for=qNotClient]").hasClass("checked")) 
			   		{
						if(dept_nc.value=="select" )
						{
							seeError=true;
               			 	Nextel.Module.Manager.prototype.addErrorStyle(dept_nc.parentNode);
						}
						else
						
							this.removeErrorStyle(field); //no error, remove error style
									
			    	}
			    	else 
			     	   {
						if(dept.value=="select" )
						{   
							seeError=true;
                			Nextel.Module.Manager.prototype.addErrorStyle(dept.parentNode);
						}
						else
						    
							this.removeErrorStyle(field);; //no error, remove error style
					   }
		        }
		        else{
		        
		        if(dept.value=="select" )
					{
	                  seeError=true;
	                	Nextel.Module.Manager.prototype.addErrorStyle(dept.parentNode);
					}
					else
									
						this.removeErrorStyle(field); //no error, remove error style
					
		        }
			}
			
		    else if($(field).hasClass("subField")) 
		    {
		    	var sub = document.getElementById('whichSubject');
		    	var dept = document.getElementById('whichDepartment');
					if(sub.value=="select" )
			   		{
			 			seeError=true;
				 		Nextel.Module.Manager.prototype.addErrorStyle(sub.parentNode);
				   }
				   else{ 
						this.removeErrorStyle(field); //no error, remove error style
					}
			}
			else if (fieldVal == $(field).attr('defaultTxt') || this.validateField(fieldVal)) {			
				seeError = true;
				this.addErrorStyle(field); //see error style, add style
				if (firstErrorField == null) {
				firstErrorField = field;
				}
			}			
			else if ($(field).hasClass("emailField")) {
				var isValid = fieldVal.match(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i) ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				
				} else if(fieldVal.length < 7){
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}
				}
				else{
					this.removeErrorStyle(field); //no error, remove error style
				}
			}			
			else if ($(field).hasClass("numberFieldCpf")) {
			fieldVal = $.trim(fieldVal);
				var isValid = (fieldVal.match(/^[0-9]+$/) && (fieldVal.length == 11 ||fieldVal.length == 14)) ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
				else if(!this.validateCpfField(fieldVal)){
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}
				}
				else{ 
						this.removeErrorStyle(field); //no error, remove error style
					}		
			}
			else if ($(field).hasClass("numberFieldTenDigit")) {
				var isValid = fieldVal.match("(\\d{10})") ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
				else{ 
						this.removeErrorStyle(field); //no error, remove error style
					}
				
			}			
			else if ($(field).hasClass("nameField")) {
				var isValid = fieldVal.match(/[()<>=+!@#$%^*;/[:&_]/) ? true : false;
				if (isValid==true) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
				else{ 
						this.removeErrorStyle(field); //no error, remove error style
					}
				
			}
			else {
				this.removeErrorStyle(field); //no error, remove error style
			}
		}
		
		if (!seeError) { //no error
									
			for (var i=0, t=requiredFields.length; i<t; i++) 
			{
				var field = requiredFields[i];
				var fieldVal = $(field).val();
				if ($(field).hasClass("numberFieldCpf")) {
                	var isValid = true;					
					isValid = (fieldVal.length == 11 ||fieldVal.length == 14) ? true : false;
					if(isValid)
					{	
						//cpf validation				
						if(fieldVal.length == 11)
						{
							var s = fieldVal;
							var varFirstChr = s.charAt(0);
                        	var vaCharCPF = false;
                        	for ( var i=0; i<=10; i++ )
                       		 {
	                            var c = s.charAt(i);
	                            if( ! (c>="0")&&(c<="9") )
	                                isValid = false;
	                            if( c!=varFirstChr )
	                                vaCharCPF = true;
                        	}
               
	                        if( ! vaCharCPF )
	                            isValid = false;
                       
	                        soma=0;
	                        for ( i=0; i<9; i++ )
	                        {
	                            soma += (10-i) * ( eval(s.charAt(i)) );   
	                        }
	                        digito_verificador = 11-(soma % 11);
	                        if ( (soma % 11) < 2 )
	                            digito_verificador = 0;
	                        if ( eval(s.charAt(9)) != digito_verificador )
	                            isValid = false;
	                        soma=0;
	                        for ( i=0; i<9; i++ )
	                        {
	                            soma += (11-i) * ( eval(s.charAt(i)) );
	                        }
	                        soma += 2 * ( eval(s.charAt(9)) );
	                        digito_verificador = 11-(soma % 11);
	                        if ( (soma % 11) < 2 )
	                            digito_verificador = 0;
	                        if ( eval(s.charAt(10)) != digito_verificador )
	                            isValid = false;
	                            
						}
						else if(fieldVal.length == 14)
						{
							//cpnj validation
							var str_cnpj = fieldVal;			    		
	                		var cnpj = str_cnpj;
	                		var numeros,digitos,soma,i,resultado,pos,tamanho,digitos_iguais;
	                		digitos_iguais = 1;					
	                		
							for (i = 0; i < cnpj.length - 1; i++)
	                    	if (cnpj.charAt(i) != cnpj.charAt(i + 1)) 
	                    	{                
	                    		digitos_iguais = 0;
	                   		 	break;
	                   		 }
	                		if (!digitos_iguais) 
	                		{      			
	                    		tamanho = cnpj.length - 2;                  		
	                    		numeros = cnpj.substring(0, tamanho);                  	
	                    		digitos = cnpj.substring(tamanho);                   	
	                    		soma = 0;
	                    		pos = tamanho - 7;
	                       	
	                   			 for (i = tamanho; i >= 1; i--)
	                     		{
	                       			soma += numeros.charAt(tamanho - i) * pos--;
	                       	
	                        		if (pos < 2)
	                            		pos = 9;
	                     		}
	                   			resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
	                    		if (resultado != digitos.charAt(0))
	                    		{
	                         		isValid = false;
	                    		}
	                    		tamanho = tamanho + 1;
	                    		numeros = cnpj.substring(0, tamanho);
	                    		soma = 0;
	                    		pos = tamanho - 7;
	                    		for (i = tamanho; i >= 1; i--)
	                     		{
	                        		soma += numeros.charAt(tamanho - i) * pos--;
	                       
	                        		if (pos < 2)
	                            	pos = 9;
	                     		}
	                    		resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
	                    		if (resultado != digitos.charAt(1))
	                     		{
	                         		isValid = false;
	                     		}    
	                     		//isValid = true;
	                		}
	                		else
	                		{
	                    		isValid = false;
	                		}
							
							if (!isValid) {
								seeError = true;
								this.addErrorStyle(field); //see error style, add style
								if (firstErrorField == null) {
									firstErrorField = field;
								}	
							}
							break;
						}
				
					}	
				
					if (!isValid) {
						seeError = true;
						this.addErrorStyle(field); //see error style, add style
						if (firstErrorField == null) {
							firstErrorField = field;
						}	
					}
			
				}
				else {
					this.removeErrorStyle(field); //no error, remove error style
				}
			}
			
			if (!seeError) { //no error
				if (!$(form).hasClass('ajaxForm')) { //not ajaxform
					var btn = $(form).find('.hiddenSubmitbtn');
			
					btn.click();
					
					//form.submit(); //submit form
				}
			}
			return true;
		}
		
	},
	 
	 
	 
	submitForm : function(form) {
		if($(form).attr("id") == "finderForm") {			
			Nextel.Module.Manager.prototype.submitFinderForm(form);
			
		}
		else if($(form).attr("id") == "postalCodeForm") {	
	
			Nextel.Module.Manager.prototype.submitPostalcodeForm(form);
			
		}
		
		else if($(form).attr("id") == "newsLetterForm") {	
	
			Nextel.Module.Manager.prototype.submitNewsLetterForm(form);
			
		}	
		
		else if($(form).attr("id") == "contactUsForm") {	
	
	
			Nextel.Module.Manager.prototype.submitContactUsForm(form);
			
		}
		
		else {
		var requiredFields = $(form).find('.requiredField'); //find all required fields
		var seeError = false;
		var firstErrorField;
		for (var i=0, t=requiredFields.length; i<t; i++) {
		var field = requiredFields[i];
			var fieldVal = $(field).val();
			if (fieldVal == $(field).attr('defaultTxt') || this.validateField(fieldVal)) {
				seeError = true;
				if ($(field).hasClass("smsNumberField")) {
				document.getElementById('errSMS').innerHTML=document.getElementById('emptyCheckSms').value;
				}
				this.addErrorStyle(field); //see error style, add style
				if (firstErrorField == null) {
				firstErrorField = field;
				}
				if(document.getElementById('confirmEmail') != null && document.getElementById('errEmail') != null)
				{
					if(document.getElementById('confirmEmail').value == "")
					{
						document.getElementById('errEmail').innerHTML='Por favor, confirme seu e-mail.';
					}
				}
			}
			
			
			else if ($(field).hasClass("emailField")) {
				var isValid = fieldVal.match(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i) ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}else{
					  this.removeErrorStyle(field);
				}
				if ($(field).hasClass("checkEmailField")) {
			     	var email=document.getElementById('emailAddress');
			    	var confirmEmail=document.getElementById('confirmEmail');
               
					if (email.value !="" && confirmEmail.value != "" && email.value != confirmEmail.value) {
					document.getElementById('errEmail').innerHTML='Este endere&ccedil;o de e-mail n&atilde;o corresponde ao e-mail fornecido anteriormente.';
					seeError = true;	
					this.addErrorStyle(field);
					if (firstErrorField == null) {
							firstErrorField = field;
						}
					}
					else{
					  this.removeErrorStyle(field);
					}
				}
			}
			
			else if ($(field).hasClass("numberFieldTenDigit")) {
				var isValid = fieldVal.match("(\\d{10})") ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
				else{ 
						this.removeErrorStyle(field); //no error, remove error style
					}
			}
			else if ($(field).hasClass("smsNumberField")) {
				var isValid = fieldVal.match("(\\d{10})") ? true : false;
				if (!isValid) {
					document.getElementById('errSMS').innerHTML=document.getElementById('numberCheckSms').value;
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
				else{ 
						this.removeErrorStyle(field); //no error, remove error style
					}
				
			}
			else if ($(field).hasClass("numberFieldCEP")) {
				var isValid = fieldVal.match("(^\\d{5}(\\d{3})?$)") ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
			}
			else if ($(field).hasClass("numberField")) {
				if(fieldVal != ""){			
				var isValid = fieldVal.match(/^[0-9]+$/) ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
			}
			}
		
			else if ($(field).hasClass("rgExpVal")) {
				if(fieldVal == "" || fieldVal == "DD/MM/AAAA"){
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}
				}
			}
		
			else if ($(field).hasClass("rgField")) {
				var isValid = fieldVal.match(/^[a-zA-Z0-9]+$/) ? true : false;
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
				else{ 
						this.removeErrorStyle(field); //no error, remove error style
					}
				
			}
			else if ($(field).hasClass("firstName")) {
				var isValid = fieldVal.match(/[()<>,;/[:&_]/) ? true : false;//to be included [ and "
					if (isValid==true) {
					seeError = true;
						this.addErrorStyle(field); //see error style, add style
						if (firstErrorField == null) {
							firstErrorField = field;
						}	
					}
			}
			else if ($(field).hasClass("lastName")) {
				var isValid = fieldVal.match(/[()<>,;/[:&_]/) ? true : false;//to be included [ and "
					if (isValid==true) {
					seeError = true;
						this.addErrorStyle(field); //see error style, add style
						if (firstErrorField == null) {
							firstErrorField = field;
						}	
					}
			}
			else if ($(field).hasClass("numberFieldCpf")) {
				var fieldVal = $(field).val();
				var isValid = (fieldVal.match(/^[0-9]+$/) && (fieldVal.length == 11 ||fieldVal.length == 14)) ? true : false;				
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}			
			}
			else if ($(field).hasClass("userName")) {
				var isValid = fieldVal.match(/[()<>,;/[:&_]/) ? true : false;//to be included [ and "
					if (isValid==true) {
					seeError = true;
						this.addErrorStyle(field); //see error style, add style
						if (firstErrorField == null) {
							firstErrorField = field;
						}	
					}
			}			
			else if ($(field).hasClass("nickName")) {
			
				var isValid = fieldVal.match(/[*-+.@!~#$%^`=?\()<>,;[:&|_]/) ? true : false;//to be included [ and "
					if (isValid==true) {
					seeError = true;
						this.addErrorStyle(field); //see error style, add style
						if (firstErrorField == null) {
							firstErrorField = field;
						}	
					}
			}
			else if ($(field).hasClass("cpfValidation")) {
                   
                    var s = fieldVal;
                    var isValid = true;
                   
                    if (s.length < 11)
                        isValid = false;
                    else
                    {
                        var varFirstChr = s.charAt(0);
                        var vaCharCPF = false;
                        for ( var i=0; i<=10; i++ )
                        {
                            var c = s.charAt(i);
                            if( ! (c>="0")&&(c<="9") )
                                isValid = false;
                            if( c!=varFirstChr )
                                vaCharCPF = true;
                        }
               
                        if( ! vaCharCPF )
                            isValid = false;
                       
                        soma=0;
                        for ( i=0; i<9; i++ )
                        {
                            soma += (10-i) * ( eval(s.charAt(i)) );   
                        }
                        digito_verificador = 11-(soma % 11);
                        if ( (soma % 11) < 2 )
                            digito_verificador = 0;
                        if ( eval(s.charAt(9)) != digito_verificador )
                            isValid = false;
                        soma=0;
                        for ( i=0; i<9; i++ )
                        {
                            soma += (11-i) * ( eval(s.charAt(i)) );
                        }
                        soma += 2 * ( eval(s.charAt(9)) );
                        digito_verificador = 11-(soma % 11);
                        if ( (soma % 11) < 2 )
                            digito_verificador = 0;
                        if ( eval(s.charAt(10)) != digito_verificador )
                            isValid = false;  
                    }
                    if (!isValid) {
                        seeError = true;
                            this.addErrorStyle(field); //see error style, add style
                            if (firstErrorField == null) {
                                firstErrorField = field;
                            }   
                        } 
            }

            else if ($(field).hasClass("cnpj"))
            { 
                var str_cnpj = fieldVal;
			    var isValid = true;
                var cnpj = str_cnpj;
				
                var numeros,digitos,soma,i,resultado,pos,tamanho,digitos_iguais;
                digitos_iguais = 1;
					
                if (cnpj.length < 14 )
                    {              
                    isValid = false;
                    }
					for (i = 0; i < cnpj.length - 1; i++)
                    if (cnpj.charAt(i) != cnpj.charAt(i + 1)) 
                    {                
                    digitos_iguais = 0;
                    break;
                    }
                if (!digitos_iguais) 
                {      			
                    tamanho = cnpj.length - 2;                  		
                    numeros = cnpj.substring(0, tamanho);                  	
                    digitos = cnpj.substring(tamanho);                   	
                    soma = 0;
                    pos = tamanho - 7;
                       	
                    for (i = tamanho; i >= 1; i--)
                     {
                        soma += numeros.charAt(tamanho - i) * pos--;
                       	
                        if (pos < 2)
                            pos = 9;
                     }
                    resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
                    if (resultado != digitos.charAt(0))
                    {
                         isValid = false;
                    }
                    tamanho = tamanho + 1;
                    numeros = cnpj.substring(0, tamanho);
                    soma = 0;
                    pos = tamanho - 7;
                    for (i = tamanho; i >= 1; i--)
                     {
                        soma += numeros.charAt(tamanho - i) * pos--;
                       
                        if (pos < 2)
                            pos = 9;
                     }
                    resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
                    if (resultado != digitos.charAt(1))
                     {
                         isValid = false;
                     }    
                     //isValid = true;
                }
                else
                {
                    isValid = false;
                }
                if (!isValid)
                 {
               		seeError = true;
                    this.addErrorStyle(field);
                     //see error style, add style
                    if (firstErrorField == null)
                     {
                        firstErrorField = field;
                     }   
                 }   
            } 
            
			else if (field.type.indexOf('checkbox') > -1) {
				var isValid = $(field).attr("checked");
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
			}
			else if (field.type.indexOf('radio') > -1) {
				var name = $(field).attr("name");
				var radioval = $('input[name='+ name + ']:checked').val();
				if (radioval != null) {
					var isValid = true;
				}
				//var radiobuttons = $(field).parents("form").find('input[name='+ name + ']');
				//var isValid = $(field).attr("checked");
				if (!isValid) {
					seeError = true;
					this.addErrorStyle(field); //see error style, add style
					if (firstErrorField == null) {
						firstErrorField = field;
					}	
				}
			}
			else {
				this.removeErrorStyle(field); //no error, remove error style
			}
		}
		
		if (!seeError) 
		{ //no error
			
				if (!$(form).hasClass('ajaxForm')) {
		//not ajaxform
				 
				 if($(form).attr('name') == "personalInfoForm")
					{
						var jobTitle=$("#jobTitle").val();
						var billingAddress1 = $("#billingAddress1").val();
						var billingAddress2 = $("#billingAddress2").val();
						var billingAddress3 = $("#billingNeighborhood").val();
						var billingCity = $("#billingCity").val();
						var billingState = $("#billingState").val();
						var billingCepCode = $("#billingPostalCode").val();
						var billingStreetType = $("#billingStreetType").val();
						var billingNumero = $("#billingNumero").val();
						var billingCityCode = $("#billingCityCode").val();
						var shippingNumero = $("#shippingNumero").val();
						var cpf = $("#cpf").val();
						var rg = $("#rg").val();
						var rgExpirationDate = $("#rgExpirationDate").val();
						
						var shippingAddress1 = $("#shippingAddress1").val();
						var shippingAddress2 = $("#shippingAddress2").val();
						var shippingAddress3 = $("#shippingNeighborhood").val();
						var shippingCity = $("#shippingCity").val();
						var shippingState = $("#shippingState").val();
						var shippingStreetType = $("#shippingStreetType").val();
						var shippingCityCode = $("#billingCityCode").val();
						var shippingCepCode = $("#shippingPostalCode").val();
						
												
						$("#hiddenBillingAddress1").val(billingAddress1+"/"+billingStreetType);
						//$("#hiddenBillingAddress1").val(billingStreetType+"/"+billingAddress1);
						$("#hiddenBillingAddress2").val(billingNumero+"/"+billingAddress2);
						$("#hiddenBillingAddress3").val(billingAddress3);
						$("#hiddenBillingCity").val(billingCity);
						$("#hiddenBillingState").val(billingState);
						$("#hiddenBillingPostalCode").val(billingCepCode);
						
						$("#hiddenCpf").val(cpf);
						$("#hiddenRg").val(rg);
						$("#hiddenRgExpirationDate").val(rgExpirationDate);
						
						
						$("#hiddenShippingAddress1").val(shippingAddress1+"/"+shippingStreetType);
						$("#hiddenShippingAddress2").val(shippingNumero+"/"+shippingAddress2);
						$("#hiddenShippingAddress3").val(shippingAddress3);
						$("#hiddenShippingCity").val(shippingCity);
						$("#hiddenShippingState").val(shippingState);
						$("#hiddenShippingPostalCode").val(shippingCepCode);
						$("#hiddenJobTitle").val(jobTitle);
												
						var relationship = $("#contactrelationship").val(); 
						$("#hiddenRelationship").val(relationship);	 	
					  	
						this.openTheOverlay();
						
					}
					if($(form).attr('id') == "changePlansForm")
					{
						var sub = $(form).find("input[type=submit]");
						var submitName = sub.attr("name");
						var submitValue = sub.attr("value");
						$(form).append("<input type=\"hidden\" name=\"" + submitName + "\" value=\"" + submitValue + "\">");
						var btn = $(form).find('.hiddenSubmitbtn');
						btn.click();
						form.submit();
					}
					if($(form).attr('id') == "verifyPhoneForm")
					{
						
						var sub = $(form).find("input[type=submit]");
						var submitName = sub.attr("name");
						var submitValue = sub.attr("value");
						$(form).append("<input type=\"hidden\" name=\"" + submitName + "\" value=\"" + submitValue + "\">");
						var btn = $(form).find('.hiddenSubmitbtn');
						btn.click();
						form.submit();
						
					}
					//added for shipping address update
					if($(form).attr('id') == "shippingAddrForm")
					{
						var shippingAddress1 = $("#shippingAddress1").val();
						var shippingAddress2 = $("#shippingAddress2").val();
						var shippingAddress3 = $("#shippingNeighborhood").val();
						var shippingCity = $("#shippingCity").val();
						var shippingState = $("#shippingState").val();
						var shippingCepCode = $("#shippingPostalCode").val();
						var shippingStreetType = $("#shippingStreetType").val();
						var shippingNumero = $("#shippingNumero").val();
						$("#hiddenAddress1").val(shippingAddress1+"/"+shippingStreetType);
						$("#hiddenAddress2").val(shippingNumero+"/"+shippingAddress2);
						$("#hiddenAddress3").val(shippingAddress3);
						$("#hiddenCity").val(shippingCity);
						$("#hiddenState").val(shippingState);
						$("#hiddenPostalCode").val(shippingCepCode);
						
						
					}
					if($(form).attr('id') == "ezLeadForm"){
						var currentDate = new Date();
						var day = currentDate.getDate();
						var month = currentDate.getMonth();
						var year = currentDate.getFullYear();
						var hours = currentDate.getHours();
						var minutes = currentDate.getMinutes();
				
						  var suffix = "AM";
						  if (hours >= 12) {
						  suffix = "PM";
						  hours = hours - 12;
						  }
						  if (hours == 0) {
						  hours = 12;
						  }				
						  if (minutes < 10) {
						  minutes = "0" + minutes;
						  }
						  
						  $("#clientDate").val(day+"/"+month + "/" + year);
						  $("#clientTime").val(hours + ":" + minutes + " " + suffix);
					}
					
					
					//added for sorting of orders in profile_order page (order history)
					if($(form).attr('id') == "sortForm")
					{
						var btn = $(form).find('.hiddenSubmitbtn');
						
						btn.click();
						form.submit();
						
					}				
				var btn = $(form).find('.hiddenSubmitbtn');
				btn.click();
				
			}
			return true;
		}
		else 
		{
			if(firstErrorField.type == "text") 
				{
					$(firstErrorField).focus();
				}
			else if(firstErrorField.type == "select-one") 
				{	
					window.scroll(300,200);
				}	
			 else if(firstErrorField.type == "checkbox") 
				{
					$(firstErrorField).focus();
				}
			
			else if ($(form).attr('name') == "addReviewForm") {
				$('#reviewTextarea').focus();
				Nextel.OverlayView.prototype.openOverlayView('#emptyReviewForm');
				$('#emptyReviewForm .overlayBtn').unbind('click').bind('click', function(){
					$('#emptyReviewForm').hide();
					$('#reviewTextarea').focus();
				});
			}
			return false;
		}}
	},
	/**
	 * Set error style to form field.
	 * @param {Object} el current input field
	 * @function
	 **/ 
	addErrorStyle : function(el) {
		try {
			
			var pNode = el.parentNode;
			var nn = pNode.nodeName.toLowerCase();
			
			if (nn == "fieldset") {
				$(pNode).addClass('error');
			}
			else {
				this.addErrorStyle(pNode);
			}
			$(el).unbind('mouseenter mouseleave');
			//INPUTS CUSTOM ERRORS 01/08/2011
			var margin= $(el).css('margin');
			if((!($(pNode).hasClass('error')))&&(margin!='3px')){
			if($(el).hasClass('inputField')){
				var dwidth = ($(el).width())-4;
				var dheight = ($(el).height())-4;
				$(el).css({'margin': '3px', 'width':dwidth, 'height':dheight});
			}
			}
			//END INPUT CUSTOM ERRORS
		} catch (err) { ; }
	},
	/**
	 * Remove error style from form field.
	 * @param {Object} el current input field
	 * @function
     **/
     removeErrorStyle : function(el) {
	 	try {
			var pNode = el.parentNode;
			var nn = pNode.nodeName.toLowerCase();
			
			if (nn == "fieldset") {
				$(pNode).removeClass('error');
			}
			else {
				this.removeErrorStyle(pNode);
			}	
		} catch (err) { ; }
	
	},
	/**
	 * Validate a form field.
	 * @returns {Boolean} is the field valid.
	 * @param {String} val the value of current file.
	 * @function
	 **/ 
	validateField : function(val) {
		val = val.replace(/^\s+|\s+$/g, '');
		return (val == '' || val.length == 0);	
	},
	
	
	validatePhoneField : function(val){
	var phoneError = true;
	 for(var i=0;i<val.length-1;i++){
					if(val.charAt(i)== val.charAt(i+1)){
						phoneError=false;
						}
					else{
						phoneError=true;
						break;
						}
				}
				return phoneError;
	},
	
	
	
	validateCpfField : function(val){
	val = $.trim(val);
	var isValid = true;
	if(val.length == 11)
						{
							var s = val;
							var varFirstChr = s.charAt(0);
                        	var vaCharCPF = false;
                        	for ( var i=0; i<=10; i++ )
                       		 {
	                            var c = s.charAt(i);
	                            if( ! (c>="0")&&(c<="9") )
	                                isValid = false;
	                            if( c!=varFirstChr )
	                                vaCharCPF = true;
                        	}
               
	                        if( ! vaCharCPF )
	                            isValid = false;
                       
	                        soma=0;
	                        for ( i=0; i<9; i++ )
	                        {
	                            soma += (10-i) * ( eval(s.charAt(i)) );   
	                        }
	                        digito_verificador = 11-(soma % 11);
	                        if ( (soma % 11) < 2 )
	                            digito_verificador = 0;
	                        if ( eval(s.charAt(9)) != digito_verificador )
	                            isValid = false;
	                        soma=0;
	                        for ( i=0; i<9; i++ )
	                        {
	                            soma += (11-i) * ( eval(s.charAt(i)) );
	                        }
	                        soma += 2 * ( eval(s.charAt(9)) );
	                        digito_verificador = 11-(soma % 11);
	                        if ( (soma % 11) < 2 )
	                            digito_verificador = 0;
	                        if ( eval(s.charAt(10)) != digito_verificador )
	                            isValid = false;
	                            
						}
	else if(val.length == 14)
						{
							//cpnj validation
							var str_cnpj = val;			    		
	                		var cnpj = str_cnpj;
	                		var numeros,digitos,soma,i,resultado,pos,tamanho,digitos_iguais;
	                		digitos_iguais = 1;					
	                		
							for (i = 0; i < cnpj.length - 1; i++)
	                    	if (cnpj.charAt(i) != cnpj.charAt(i + 1)) 
	                    	{                
	                    		digitos_iguais = 0;
	                   		 	break;
	                   		 }
	                		if (!digitos_iguais) 
	                		{      			
	                    		tamanho = cnpj.length - 2;                  		
	                    		numeros = cnpj.substring(0, tamanho);                  	
	                    		digitos = cnpj.substring(tamanho);                   	
	                    		soma = 0;
	                    		pos = tamanho - 7;
	                       	
	                   			 for (i = tamanho; i >= 1; i--)
	                     		{
	                       			soma += numeros.charAt(tamanho - i) * pos--;
	                       	
	                        		if (pos < 2)
	                            		pos = 9;
	                     		}
	                   			resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
	                    		if (resultado != digitos.charAt(0))
	                    		{
	                         		isValid = false;
	                    		}
	                    		tamanho = tamanho + 1;
	                    		numeros = cnpj.substring(0, tamanho);
	                    		soma = 0;
	                    		pos = tamanho - 7;
	                    		for (i = tamanho; i >= 1; i--)
	                     		{
	                        		soma += numeros.charAt(tamanho - i) * pos--;
	                       
	                        		if (pos < 2)
	                            	pos = 9;
	                     		}
	                    		resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
	                    		if (resultado != digitos.charAt(1))
	                     		{
	                         		isValid = false;
	                     		}    
	                     		//isValid = true;
	                		}
	                		else
	                		{
	                    		isValid = false;
	                		}
							
							
						}
						else
						{}
						
				return isValid;
	},
	
	/**
	 * Refreshes the set
	 * @function
	 **/
	setCustomSelectValue : function(select_id,value) {
		$("#" + select_id).val(value);
		$("#" + select_id).selectmenu('destroy');
		$("#" + select_id).selectmenu({style:'dropdown', maxHeight : 145});
		$('.widget-wrap-inner').jScrollPane({
			scrollbarWidth: 7,
			scrollbarMargin:5,
			dragMinHeight: 40
		});
		$('.ui-selectmenu').bind('focus', function(){
			Nextel.Module.Manager.prototype.setFocusStyle(this);
		}).bind('click', function(){
			Nextel.Module.Manager.prototype.setFocusStyle(this);
		});
	},
	/* Open the overlay
	*/
	openTheOverlay : function(){
		var theOverlay = $("#personalInfoFormSubmit").attr("rel");
		if ($(this).attr('url') !== undefined) {
			var theUrl = $(this).attr("url");
			setTimeout(function() {
				window.location = theUrl;
			}, 500);		
		}							
		$(window).bind('scroll', function(){
			scroll(0,5000);
		})						
		Nextel.OverlayView.prototype.openOverlayView("#"+theOverlay);
	}
}


Nextel.Login = {};
/** 
 *	Nextel.Login.Manager is used to handle all the functionalities of the forgot user name and forgot password overlay.
 *	Also, it contains functions to handle the login form on the login bar.
 *  @constructor
**/
Nextel.Login.Manager = function() { this.init(); }

/**
 * Constants for Nextel.Login, including all the unique ID and CLASS
 * @constant
 */ 
Nextel.Login.Manager.Constants = {
	PW_TRIGGER : "forgotPWTrigger",
	PW_OVERLAY_ID : "forgotPasswordCont",
	PW_FORM_ID : "forgotPasswordForm",
	PW_MESSAGE_ID : "forgotPasswordMessage",
	PW_SUCCESS_ID : "forgotPasswordSuccess",
	PW_LOADING_ID : "forgotPasswordLoading",
	UN_TRIGGER : "forgotUNTrigger",
	UN_OVERLAY_ID : "forgotUsernameCont",
	UN_FORM_ID : "forgotUsernameForm",
	UN_MESSAGE_ID : "forgotUsernameMessage",
	UN_SUCCESS_ID : "forgotUsernameSuccess",
	UN_LOADING_ID : "forgotUsernameLoading",		
	OVERLAY_SHOW_CLASS : "overlay-visible"
}

Nextel.Login.Manager.prototype = {
	_c : Nextel.Login.Manager.Constants,
	
	/**
	 * Attach events to different buttons and links for fogot password and forgot username functionality.
	 * @function
	 */ 
	init : function() {
		var tc = this;
		
		$('.' + this._c.PW_TRIGGER).bind('click', tc, function(){	
			Nextel.Login.Manager.prototype.toggleOverlay(this, tc._c.PW_OVERLAY_ID); //attach click event
		});
		
		$('.' + this._c.UN_TRIGGER).bind('click', tc, function(){
			Nextel.Login.Manager.prototype.toggleOverlay(this, tc._c.UN_OVERLAY_ID); //attach click event
		});
		
		$('#password_input').bind('click', function(){
			$(this).addClass('displaynone'); //hide fake password
			$('#password_real').removeClass('displaynone').focus(); //show real password
		});
		
		$('.passwordInput').bind('click', function(){
			$(this).addClass('displaynone'); //hide fake password
			$(this).siblings(".passwordField").removeClass('displaynone').focus();
		})
		
		this.attachFormSubmitEvt();
		
	},
	
	/**
	 * Attach event to HTML submit button and form submit to intercept the form for validation.
	 * @function
	 */
	attachFormSubmitEvt : function() {
		var tc = this;
		$('.forgotOverlay').each(function() {
			var form = $(this).find('form');
			form.bind('submit', tc, function(event){ //attach submit event
				event.preventDefault(); //stop form from submit
				tc.processForm(this);
				return false;
			});
	
			form.find('.htmlSubmit').bind('click', [tc, form], function(event){
				event.preventDefault();
				tc.processForm(form);
				return false;
			});
		});
	},
	/**
	 * Calls function to validate the form. If validated, then make ajax request.
	 * @param {Object} el Form 
	 * @function
	 */	
	processForm : function(el) {
		if (Nextel.Module.Manager.prototype.submitForm(el)) { //validate form
			if ($(el).attr('id') == this._c.PW_FORM_ID) {
				Nextel.Overlay.prototype.ajaxRequest($(el), $("#" + this._c.PW_SUCCESS_ID), $("#" + this._c.PW_MESSAGE_ID), $("#" + this._c.PW_OVERLAY_ID), $("#" + this._c.PW_LOADING_ID), $(el)); //ajax request
			}
			else {
				Nextel.Overlay.prototype.ajaxRequest($(el), $("#" + this._c.UN_SUCCESS_ID), $("#" + this._c.UN_MESSAGE_ID), $("#" + this._c.UN_OVERLAY_ID), $("#" + this._c.UN_LOADING_ID), $(el)); //ajax request
			}
		}	
	},
	 
	/**
	 * Attach event to links to trigger forgot username and forgot password overlay depends on the overlay_id.
	 * @param {Object, String} trigger overlay_id object that trigger the toggle vent, overlay_id is the overlay that will be display or hide.
	 * @function
	 */ 
	toggleOverlay : function(trigger, overlay_id) {
		var el = $('#' + overlay_id);
	
		if (el.css('display') == 'block') {
			this.hideOverlay(); //hide overlay
		}
		else {
			//show associate overlay
			var wrapper_pos = $('#globalNav').position();
			var trigger_pos = $(trigger).position();
			var o_width = parseInt(el.css('width'));		
			var x_pos = parseInt(trigger_pos.left) - parseInt(wrapper_pos.left) + (parseInt($(trigger).width())/2) - (o_width /2);
			var y_pos = parseInt(trigger_pos.top) + (parseInt($(trigger).height())) + 2;
			this.hideOverlay(el);
			el.css({'margin-left': x_pos + 'px', 'top' : y_pos + 'px'}).fadeIn(500);
		}	
	},
	/**
	 * This function will hide any overlay that is currently visible to the user.
	 * @function
	 */
	hideOverlay : function() {
		Nextel.Overlay.prototype.hideOverlay(arguments[0]);
	}
}


/**
 * Nextel.Cart manages the functionality of the shopping cart.
 * @constructor
 */
Nextel.Cart = function() { this.init(); }

/**
 * Define all the constants that will be used for Nextel.Cart.
 * @constant
 */
Nextel.Cart.Constants = {
	BODY : "body",
	CART_TRIGGER : "cartLink",
	CART_WRAPPER : "navItem6",
	CART : "shoppingCart",
	CART_EQUIPMENT : "cartEquipment",
	CART_PLAN : "cartPlan",
	CART_SIM : "cartSim",
	CART_BUNDLE : "cartBundle",
	CART_SERVICES : "cartServices",
	CART_ITEM_REMOVE : "removeItem",
	SERVICE_CART_ITEM_REMOVE : "serviceRemoveItem",
	CART_EMPTYCLASS : "empty",
	CART_ACTIVECLASS : "active",
	CART_ADDAPLANCLASS : "addaplan",
	CART_ADDSERVICESCLASS : "addservices",
	CART_FULLCLASS : "full",
	CART_SIMCLASS : "simselected",
	CART_BUNDLECLASS : "bundleselected",
	CART_COMBINEDCLASS : "combined",
	CART_ADDEDCLASS : "added",
	CART_NOPERMISSIONSCLASS : "noperm",
	CART_NEXT : "next",
	CART_TOTALS : "totals",
	CART_AJAX : "global/js/shoppingCartReturn.js",
	CART_PERM_AJAX : "global/js/checkPermissions.js",
	CART_COSTCENTER : "global/js/checkCostCenter.js",
	CART_SESSION_COOKIE_NAME : "cartsession",
	CART_CC_COOKIE_NAME : "costcenter",
	CART_CC_FORM : "assignCCForm"
} 

Nextel.Cart.prototype = {
	_c : Nextel.Cart.Constants,

	/**
	 * Attach click event to different links and button for cart.
	 * @function
	 */
	init : function() {
		var tc = this;
		
		$('#' + this._c.CART_TRIGGER).bind('click', tc, function(e){
			
			e.stopPropagation();
			e.preventDefault();
			Nextel.Cart.prototype.showCart();
		});	
		$("." + this._c.CART_TRIGGER).bind('click', tc, function(e){
			
			e.stopPropagation();
			e.preventDefault();
			Nextel.Cart.prototype.showCart();
		});
		
		/*$('#' + this._c.CART).bind('click', tc, function(e) {
			e.stopPropagation();
		});*/
		
		$("." + this._c.CART_ITEM_REMOVE).bind('click', tc, function(e){
		
			e.preventDefault();
			Nextel.Cart.prototype.removeItem(this);
		});
		
		$("." + this._c.SERVICE_CART_ITEM_REMOVE).live('click', tc, function(e){
			e.preventDefault();
			Nextel.Cart.prototype.removeItem(this);
		});

		$('#assignCC .rsCloseBtn').bind('click', function() {
			Nextel.OverlayView.prototype.closeOverlayView("#assignCC");
		});
		
		
		
		$('#assignCC #assignCCForm .rsOverlaySubmitBtn .htmlBtn').unbind('click').bind('click', function(e) {
			e.preventDefault();
			Nextel.Cart.prototype.CCLink(e);
		});

		/*$(window.document).click(function(event) {
			if(event.button != 2) { //not right click
				if($("#" + Nextel.Cart.Constants.CART).hasClass(Nextel.Cart.Constants.CART_ACTIVECLASS)) {
				
					Nextel.Cart.prototype.showCart();
				}
			}
		}); */
	},
	/**
	 * Show the shopping cart.
	 * @function
	 */
	showCart : function() {
		var wrap = "#" + Nextel.Cart.Constants.CART_WRAPPER;
		var theCart = "#" + Nextel.Cart.Constants.CART;
		var active = Nextel.Cart.Constants.CART_ACTIVECLASS;
		var contextPath = document.getElementById("contextPath").value;
		if ($(wrap).hasClass(active)) {
			$(wrap).removeClass(active);
			$(theCart).removeClass(active);				
			var src = contextPath +"/global/img/icons/navCartArrow.gif";
            $("#navCartImage").attr("src", src);
            
		} else 
		{		
			var src = contextPath + "/global/img/icons/navCartUpArrow.gif";
            $("#navCartImage").attr("src", src);
			$(wrap).addClass(active);
			$(theCart).addClass(active);
			var test = "/NextelApp/checkout/fragments/showCart.jsp";
		
			$.ajax({
				url: test,
				data:{
					ajax_call: true	
				},
				dataType: 'json',
				contentType: "application/json; charset=utf-8",
				success: function(message){
					
					//$(theCart).removeClass(Nextel.Cart.Constants.CART_EMPTYCLASS);
					Nextel.Cart.prototype.updateCart(message);				
				
				}
				
			});	
			
		}
	},
	/**
	 * Remove an Item.
	 * @function
	 */
	removeItem : function(element) {
		
		var url1 = $(element).attr("href");			
		var test = "/NextelApp/checkout/fragments/" + url1;
		var docMode = IEVersion();
		var docuMode = docMode.DocMode;
		var browseMode = docMode.BrowserMode;
		if(browseMode=="7") 
		{		
			if(url1.indexOf('/NextelApp/') >= 0)
			{			
				var ser = url1.split('/NextelApp/');					
				var test = "/NextelApp/checkout/fragments/" + ser[1];
			}
		}		
		$.ajax({
			url: test,
			data:{
				ajax_call: true	
			},
			dataType: 'json',
			contentType: "application/json; charset=utf-8",
			success: function(message){
			
				if(message.error === true)
				{
				}else
				{		
					Nextel.Cart.prototype.updateCart(message);
					
					$(element).parents(".cartBox").removeClass(Nextel.Cart.Constants.CART_ADDEDCLASS);
					$(element).parents(".cartBox2").removeClass(Nextel.Cart.Constants.CART_ADDEDCLASS);
					$(element).parents(".cartBox3").removeClass(Nextel.Cart.Constants.CART_ADDEDCLASS);
				
					switch($(element).parents(".cartBox").attr("id")) {
					case Nextel.Cart.Constants.CART_EQUIPMENT:
					
					break;
					case Nextel.Cart.Constants.CART_PLAN:
						
						break;
					case Nextel.Cart.Constants.CART_BUNDLE:
						$("#" + Nextel.Cart.Constants.CART).removeClass(Nextel.Cart.Constants.CART_BUNDLECLASS);
						break;
					case Nextel.Cart.Constants.CART_SERVICES:
						$("#" + Nextel.Cart.Constants.CART).removeClass(Nextel.Cart.Constants.CART_FULLCLASS);
						break;
					}
					$("#" + Nextel.Cart.Constants.CART).addClass(Nextel.Cart.Constants.CART_ACTIVECLASS);
						
				}
				
			}
		});

	},
	/**
	 * Add items.
	 * @function
	 */
	addItems : function(element) 
	{
		if ($(element).hasClass('rechargeMinuteLink')) {
			Nextel.OverlayView.prototype.openOverlayView('#giftingMinutes');
		}
		var url1 = $(element).attr("href");
		var qs = url1.split("&");
		var prodId=new Array();
		var proKey;
		var prodName;
		for(var i=0;i<qs.length;i++)
		{
			prodId[i] = qs[i].split("=");						
			for(var j=0;j<prodId[i].length;j++)	{		
				proKey = prodId[i][0];
				if(proKey=="productId"){
					prodName = prodId[i][1];										
				}
			}
		}

		var isRental = false;
		selectedOption = $("input:radio:[name="+prodName+"]:checked").val();
		
			if(selectedOption == "buy")
			{
				isRental = false;
			}
			else if(selectedOption == "rent")
			{
				isRental = true;
			}
			else
			{
				isRental = false;
			}
		
		url1=url1+"&rental="+isRental;
		var purchase = {url:url1,rental:isRental};
		Nextel.Cart.prototype.checkPermissions(purchase,url1);
		Nextel.Cart.prototype.removeClasses();
	},
	/**
	 * Remove classes.
	 * @function
	 */
	removeClasses : function() {
		
		var theCart = "#" + Nextel.Cart.Constants.CART;
		$(theCart).removeClass(Nextel.Cart.Constants.CART_ADDAPLANCLASS);
		$(theCart).removeClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);
		$(theCart).removeClass(Nextel.Cart.Constants.CART_FULLCLASS);
		$(theCart).removeClass(Nextel.Cart.Constants.CART_BUNDLECLASS);
		$(theCart).removeClass(Nextel.Cart.Constants.CART_COMBINEDCLASS);
		$(theCart).removeClass(Nextel.Cart.Constants.CART_EMPTYCLASS);
		$(theCart).removeClass(Nextel.Cart.Constants.CART_NOPERMISSIONSCLASS);
		$(theCart).removeClass("adddevice");
	},
	/**
	 * Update the items in the shopping cart.
	 * @function
	 */
	updateCart : function(data) {   	
        
		var theCart = "#" + Nextel.Cart.Constants.CART;
		var wrap = "#" + Nextel.Cart.Constants.CART_WRAPPER;
		var active = Nextel.Cart.Constants.CART_ACTIVECLASS;
		var theBucket = "";
		var removeHref= "";
		Nextel.Cart.prototype.removeClasses();       
		if (data.permission === true) 
		{
			if (data.commerceItems.devices) 
			{
				//devices is present in the cart
				if(data.commerceItems.devices[0].ordered === true)
				{
					theBucket = "#" + Nextel.Cart.Constants.CART_EQUIPMENT;
					removeHref = "removeItem.jsp?item=" + data.commerceItems.devices[0].commerceItemId + "&orderId=" + data.orderId;
					$("#cartEquipment .ordered h4").html(data.commerceItems.devices[0].product);
					$("#cartEquipment .ordered p").html(data.commerceItems.devices[0].model);
					$("#cartEquipment .ordered img").attr("src", data.commerceItems.devices[0].imageUrl);
					$("#cartEquipment .ordered .removeItem").attr("href", removeHref);
					$(theBucket).addClass(Nextel.Cart.Constants.CART_ADDEDCLASS);
					window.scroll(0,0);			
				}
			}	
			if(data.commerceItems.plans)
			{
				//plan is there in the cart
				if (data.commerceItems.plans[0].ordered === true){
					
					theBucket = "#" + Nextel.Cart.Constants.CART_PLAN;
					removeHref = "removeItem.jsp?item=" + data.commerceItems.plans[0].commerceItemId +  "&orderId=" + data.orderId;
					$("#cartPlan .ordered h4").html(data.commerceItems.plans[0].product);
					$("#cartPlan .ordered img").attr("src", data.commerceItems.plans[0].imageUrl);
					$("#cartPlan .ordered .removeItem").attr("href", removeHref);
					$(theBucket).addClass(Nextel.Cart.Constants.CART_ADDEDCLASS);
					window.scroll(0,0);
				}

			}
			if(data.commerceItems.bundles) {	
				if (data.commerceItems.bundles[0].ordered === true) {
					
					var theBucket = "#" + Nextel.Cart.Constants.CART_BUNDLE;
					$("#cartBundle .ordered img").attr("src", data.commerceItems.bundles[0].imageUrl);
					$("#cartBundle .ordered p").html(data.commerceItems.bundles[0].product);
					var removeHref = "removeItem.jsp?item=" + data.commerceItems.bundles[0].commerceItemId +  "&orderId=" + data.orderId;;
					$("#cartBundle .ordered .removeItem").attr("href", removeHref);
					$(theBucket).addClass(Nextel.Cart.Constants.CART_ADDEDCLASS);
					window.scroll(0,0);	
				}
			}
			if(data.commerceItems.services)
			{
				$("#cartServices .ordered ul").html("");
				var servicesHTML = "";
				for(var i=0; i < data.commerceItems.services.length;i++)
				{
					if (data.commerceItems.services[i].ordered === true) 
					{
						theBucket = "#" + Nextel.Cart.Constants.CART_SERVICES;
						removeHref = "removeItem.jsp?item=" + data.commerceItems.services[i].commerceItemId + "&orderId=" + data.orderId;
						servicesHTML += ("\t\t\t\t\t\t\t\t\t\t<li>" + data.commerceItems.services[i].product + " <a class='removeItem serviceRemoveItem' href='"+ removeHref +"'></a></li>\n");
						
					}
					
				}
				$("#cartServices .ordered ul").html(servicesHTML);
				$(theBucket).addClass(Nextel.Cart.Constants.CART_ADDEDCLASS);

			}
			if(data.commerceItems.devices || data.commerceItems.plans || data.commerceItems.services || data.commerceItems.bundles)
			{
				var thePrice = "#" + Nextel.Cart.Constants.CART + " .totals1 .priceFormat";
				var priceVal = data.orderTotal;
				
				
				var substr= priceVal.substring(0, priceVal.length-3);
				if(substr.indexOf('.') == -1)
					{
						$(thePrice).html(priceVal.substring(0, priceVal.length-3) + "<sup>" + priceVal.substring(priceVal.length-2) + "</sup>");
					}
				$(thePrice).html(priceVal.substring(0, priceVal.length-3) + "<sup>" + priceVal.substring(priceVal.length-2) + "</sup>");
			}
			if(data.actionType === "add")
			{
				if(data.productType === "device")
				{
                    
					theBucket = "#" + Nextel.Cart.Constants.CART_EQUIPMENT;
					
					if(data.commerceItems.bundles){					
						theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE + ", #" + Nextel.Cart.Constants.CART_SERVICES;
						$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
						$(theCart).addClass(Nextel.Cart.Constants.CART_BUNDLECLASS);
						if(data.commerceItems.services)
							$(theCart).addClass(Nextel.Cart.Constants.CART_FULLCLASS);
						else
							$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);
					}
					
					//last item added was device. Check if device is only item present in the cart
					//if device is the first item then open add plan overlay
					else if(data.commerceItems.plans && data.commerceItems.plans[0].ordered === true)
					{
						//plans is present in the cart
						if(data.commerceItems.services && data.commerceItems.services[0].ordered === true)
						{
							theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE + ", #" + Nextel.Cart.Constants.CART_SERVICES;
							$(theCart).addClass(Nextel.Cart.Constants.CART_FULLCLASS);

						}else
						{
							//only plan is present
                            
							theNext="#" + Nextel.Cart.Constants.CART_SERVICES;
							document.getElementById('overlayMessageId').innerHTML=document.getElementById("serviceToDevice").value;
							theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
							$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
							$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
							$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);
							$(theBucket).addClass(Nextel.Cart.Constants.CART_ADDEDCLASS);
							if(data.status === true)
							{
							Nextel.AddPlan.prototype.openAPOverlay();
							}
						}
					}
					else{
						//plans is not in the cart. Show add plan overlay. Plan first flow
						theNext = "#" + Nextel.Cart.Constants.CART_PLAN;
						theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_SERVICES + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
						$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
						$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
						var compatibledeviceUrl = "/NextelApp/catalog.jsp?categoryId="+data.categoryId+"&productType="+data.productType+"&productIdRef="+data.productId+"&isFunnel=true";
						document.getElementById('apOverlayMessageId').innerHTML=document.getElementById("planToDevice").value;
						document.getElementById("asButtonUrl").href=compatibledeviceUrl;
						$(theBucket).addClass(Nextel.Cart.Constants.CART_ADDEDCLASS);
						$(theCart).addClass(Nextel.Cart.Constants.CART_ADDAPLANCLASS);
						if(data.status === true)
						{
						Nextel.AddPlan.prototype.buyAPLAN();
						}
					}


				}
				if(data.productType === "plan")
				{
					theBucket = "#" + Nextel.Cart.Constants.CART_PLAN;
						
						if(data.commerceItems.bundles){					
							theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE + ", #" + Nextel.Cart.Constants.CART_SERVICES;
							$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
							$(theCart).addClass(Nextel.Cart.Constants.CART_BUNDLECLASS);
							if(data.commerceItems.services)
								$(theCart).addClass(Nextel.Cart.Constants.CART_FULLCLASS);
							else
								$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);
						}				
						
						//plan is the second item in the cart
						else if(data.commerceItems.devices && data.commerceItems.devices[0].ordered === true)
						{
							theNext = "#" + Nextel.Cart.Constants.CART_SERVICES;
							theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
							document.getElementById('overlayMessageId').innerHTML=document.getElementById("serviceToPlan").value;
							$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
							$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
							$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);
							if(data.status === true)
							{
							Nextel.AddPlan.prototype.openAPOverlay();
							}
						}
						else
						{
							//plan is the first item in the cart. Next should be device
							theNext = "#" + Nextel.Cart.Constants.CART_EQUIPMENT;
							theOthers = "#" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_SERVICES + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
							var compatibledeviceUrl = "/NextelApp/catalog.jsp?categoryId="+data.categoryId+"&productType="+data.productType+"&productIdRef="+data.productId+"&isFunnel=true";
							document.getElementById("asButtonUrl").href=compatibledeviceUrl;
							$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
							$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
							$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);							
							Nextel.AddPlan.prototype.buyASIM();
						}
				}
				if(data.productType === "service")
				{
					if(data.commerceItems.devices && data.commerceItems.devices[0].ordered === true)
					{
						//plan will be present and device is present
						//need to show the full cart
						theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE + ", #" + Nextel.Cart.Constants.CART_SERVICES;
						$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
						if(data.commerceItems.plans && data.commerceItems.plans[0].ordered === true && data.commerceItems.services)
						{							
								$(theCart).addClass(Nextel.Cart.Constants.CART_FULLCLASS);						

						}else if(!data.commerceItems.plans){
							$(theCart).addClass(Nextel.Cart.Constants.CART_ADDAPLANCLASS);
						}else{
							$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);
						}
					}
					else if(data.commerceItems.bundles && data.commerceItems.bundles[0].ordered === true)
					{
						theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE + ", #" + Nextel.Cart.Constants.CART_SERVICES;
						$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
						$(theCart).addClass(Nextel.Cart.Constants.CART_BUNDLECLASS);
						if(data.commerceItems.services)
							$(theCart).addClass(Nextel.Cart.Constants.CART_FULLCLASS);
						else
							$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);
					}
					else
					{
						//plan is there
						theNext = "#" + Nextel.Cart.Constants.CART_EQUIPMENT;
						theOthers = "#" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_SERVICES + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
						var compatibledeviceUrl = "/NextelApp/catalog.jsp?categoryId="+data.categoryId+"&productType="+data.productType+"&productIdRef="+data.productId+"&isFunnel=true";
						document.getElementById("asButtonUrl").href=compatibledeviceUrl;
						document.getElementById('apOverlayMessageId').innerHTML=document.getElementById("PlanServiceToDevice").value;
						//document.getElementById('overlayMessageId').innerHTML='Would like to add a device to the service selected?';
						$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
						$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
						$(theCart).addClass("adddevice");
						
						Nextel.AddPlan.prototype.buyASIM();
						
					}
				}if(data.productType === "bundle")
				{
						if(data.commerceItems.devices && data.commerceItems.plans && data.commerceItems.services)
						{
							theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE + ", #" + Nextel.Cart.Constants.CART_SERVICES;
							$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
							$(theCart).addClass(Nextel.Cart.Constants.CART_FULLCLASS);
						}
						else if(data.commerceItems.devices && data.commerceItems.plans){
							theNext = "#" + Nextel.Cart.Constants.CART_SERVICES;
							theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
							$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
							$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
							$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);						
						}else if(data.commerceItems.devices){
							theNext = "#" + Nextel.Cart.Constants.CART_PLAN;
							theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_SERVICES + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
							$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
							$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
							$(theBucket).addClass(Nextel.Cart.Constants.CART_ADDEDCLASS);
							$(theCart).addClass(Nextel.Cart.Constants.CART_ADDAPLANCLASS);
						}else if(data.commerceItems.plans){
							theNext="#" + Nextel.Cart.Constants.CART_SERVICES;
							document.getElementById('overlayMessageId').innerHTML=document.getElementById("serviceToDevice").value;
							theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
							$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
							$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
							$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);
							$(theBucket).addClass(Nextel.Cart.Constants.CART_ADDEDCLASS);
						}else{
							theNext = "#" + Nextel.Cart.Constants.CART_SERVICES;
							theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
							document.getElementById('overlayMessageId').innerHTML=document.getElementById("serviceToBundle").value;
							if(data.status === true)
							{
							Nextel.AddPlan.prototype.openAPOverlay();
							}
							$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
							$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
							$(theCart).addClass(Nextel.Cart.Constants.CART_BUNDLECLASS);
						}
						
				}
			}else
			{
                
				if(data.commerceItems.devices && data.commerceItems.plans && data.commerceItems.services)
				{
					theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE + ", #" + Nextel.Cart.Constants.CART_SERVICES;
					$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
					$(theCart).addClass(Nextel.Cart.Constants.CART_FULLCLASS);
				}
				else if(data.commerceItems.devices && data.commerceItems.plans)
				{
					//next will be service
					theNext = "#" + Nextel.Cart.Constants.CART_SERVICES;
					theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
					$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
					$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
					$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);
					
				}
				
				else if(data.commerceItems.plans && data.commerceItems.services)
				{
					theNext = "#" + Nextel.Cart.Constants.CART_EQUIPMENT;
					theOthers = "#" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_SERVICES + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
					$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
					$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
					$(theCart).addClass("adddevice");
				}
				
				else if(data.commerceItems.bundles && data.commerceItems.services)
				{
					
					
					theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_PLAN + ", #" + Nextel.Cart.Constants.CART_BUNDLE + ", #" + Nextel.Cart.Constants.CART_SERVICES;
					$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
					$(theCart).addClass(Nextel.Cart.Constants.CART_BUNDLECLASS);
					$(theCart).addClass(Nextel.Cart.Constants.CART_FULLCLASS);
									
				}
				else if(data.commerceItems.devices)
				{
					theNext = "#" + Nextel.Cart.Constants.CART_PLAN;
					theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_SERVICES + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
					$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
					$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
					$(theCart).addClass(Nextel.Cart.Constants.CART_ADDAPLANCLASS);

				}
				else if(data.commerceItems.plans)
				{
					theNext = "#" + Nextel.Cart.Constants.CART_EQUIPMENT;
					theOthers = "#" + Nextel.Cart.Constants.CART_PLANS + ", #" + Nextel.Cart.Constants.CART_SERVICES + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
					$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
					$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
					$(theCart).addClass("adddevice");
									
				}
				else if(data.commerceItems.bundles)
				{

                
					theNext = "#" + Nextel.Cart.Constants.CART_SERVICES;
					theOthers = "#" + Nextel.Cart.Constants.CART_PLANS + ", #" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_BUNDLE;
					$(theNext).addClass(Nextel.Cart.Constants.CART_NEXT);
					$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
					$(theCart).addClass(Nextel.Cart.Constants.CART_BUNDLECLASS);
					$(theCart).addClass(Nextel.Cart.Constants.CART_ADDSERVICESCLASS);
									
				}
			}
			$(wrap).addClass(active);
			$(theCart).addClass(active);
			
		}else
		{
			//shopping cart is empty
            
			theOthers = "#" + Nextel.Cart.Constants.CART_EQUIPMENT + ", #" + Nextel.Cart.Constants.CART_SERVICES + ", #" + Nextel.Cart.Constants.CART_BUNDLE; + ", #" + Nextel.Cart.Constants.CART_PLAN;
			$(theOthers).removeClass(Nextel.Cart.Constants.CART_NEXT);
			Nextel.Cart.prototype.removeClasses();
			$(theCart).addClass(Nextel.Cart.Constants.CART_EMPTYCLASS);
		}
		
		
	},
	

	/**
	 * Call the web service to receive information about the current order
	 * @function
	 */
	ajaxRequest : function(purchase) {
		
		var url = purchase.url;
		var isRental = purchase.rental;
		$.ajax({
			data : {rental:isRental},
			dataType : "json",
			contentType: "application/json; charset=utf-8",
			type : "post",
			url :url,
			success : function(data, textStatus, XMLHttpRequest) {
			
				if(data.status === true)
				{
					document.getElementById('prodType').value = data.productType;
					document.getElementById('prodId').value = data.productId;
					document.getElementById('catId').value = data.categoryId;
					var redirectUrl = "/NextelApp/catalog.jsp?categoryId="+data.categoryId+"&productType="+data.productType+"&productIdRef="+data.productId+"&isFunnel=true";
					document.getElementById('yesSuccessUrl1').href = redirectUrl;
					Nextel.Cart.prototype.updateCart(data);
					
				}else
				{
					//var compatibledeviceUrl = "/NextelApp/catalog.jsp?categoryId="+data.currentCategoryId; 
					//$("#asButtonUrl").attr("href",compatibledeviceUrl);
					$('#asButtonUrl').bind('click', function() {
							
							Nextel.AddPlan.prototype.closeAPOverlay();
					});
					if(data.actionType === "add" && data.productType === "service"  && data.commerceItemCount === 0)
					{
						Nextel.Cart.prototype.updateCart(data);
						$('#errorOverlayMessageId').text(LOCALIZED_DATA.SERVICE_FIRST);
					}
					else
					{
						if (data.actionType === "add" && data.productType === "device" && data.commerceItemCount != undefined)
						{
							Nextel.Cart.prototype.updateCart(data);
							if(data.commerceItems.bundles && data.commerceItems.services){
								$('#errorOverlayMessageId').text(LOCALIZED_DATA.DEV_BUNDLE);
							}else if(data.commerceItems.bundles){
								$('#errorOverlayMessageId').text(LOCALIZED_DATA.DEV_BUNDLE1);
							}else
							{
								var urlsp = url.split("&");
								var proId = urlsp[6].split("=");
								var proName = proId[1];
								var dev1=document.getElementById('prodId').value;
								var dev1Name=data.commerceItems.devices[0].product;
								if(dev1 != proName)
								{
									$('#errorOverlayMessageId').html(LOCALIZED_DATA.SAME_DEV11+' '+dev1Name.bold()+' '+LOCALIZED_DATA.SAME_DEV12);
									
								}
								else
								{
									$('#errorOverlayMessageId').html(LOCALIZED_DATA.SAME_DEV21+' '+dev1Name.bold()+' '+LOCALIZED_DATA.SAME_DEV22);
								}
							}
							
						}
						else if (data.actionType === "add" && data.productType === "plan" && data.commerceItemCount != undefined)
						{
							Nextel.Cart.prototype.updateCart(data);
							if(data.commerceItems.bundles && data.commerceItems.services){
								$('#errorOverlayMessageId').text(LOCALIZED_DATA.PLAN_BUNDLE);
							}else if(data.commerceItems.bundles){
								$('#errorOverlayMessageId').text(LOCALIZED_DATA.PLAN_BUNDLE1);
							}else{
								var urlsp_plan = url.split("&");
								var proId_plan = urlsp_plan[6].split("=");
								var proName_plan = proId_plan[1];
								var plan1=document.getElementById('prodId').value;
								var plan1Name=data.commerceItems.plans[0].product;
								if(plan1 != proName_plan)
									{
									$('#errorOverlayMessageId').html(LOCALIZED_DATA.SAME_DEV11+' '+plan1Name.bold()+' '+LOCALIZED_DATA.SAME_PLAN12);
									}
								else
									{
									$('#errorOverlayMessageId').html(LOCALIZED_DATA.SAME_PLAN21+' '+plan1Name.bold()+' '+LOCALIZED_DATA.SAME_PLAN22);
									}
								}
						}
						
						else if (data.actionType === "add" && data.productType === "bundle" && data.commerceItemCount != undefined)
						{
							Nextel.Cart.prototype.updateCart(data);
							var urlsp_bund = url.split("&");
							var proId_bund = urlsp_bund[5].split("=");
							var proName_bund = proId_bund[1];
							var bund1=document.getElementById('prodId').value;
							if(data.commerceItems.devices && data.commerceItems.plans && data.commerceItems.services){
								$('#errorOverlayMessageId').text(LOCALIZED_DATA.PLAN_SERV_BUND);
							
							}else if(data.commerceItems.devices && data.commerceItems.plans){
							    $('#WarningNote').html('Aten&ccedil;&atilde;o!');
								$('#errorOverlayMessageId').text(LOCALIZED_DATA.DEV_PLAN_BUND);
								
							}else if(data.commerceItems.devices){
									$('#WarningNote').html('Aten&ccedil;&atilde;o!');
									$('#errorOverlayMessageId').text(LOCALIZED_DATA.BUND_DEV);
									
							}else if(data.commerceItems.plans){
									$('#WarningNote').html('Aten&ccedil;&atilde;o!');
									$('#errorOverlayMessageId').text(LOCALIZED_DATA.BUND_PLAN);
						
							}

							else
							{
								var bund1Name=data.commerceItems.bundles[0].product;
								if(bund1 != proName_bund)
									{
									$('#errorOverlayMessageId').html(LOCALIZED_DATA.SAME_DEV11+' '+bund1Name.bold()+' '+LOCALIZED_DATA.SAME_BUNDLE12);
									}
								else
									{
									$('#errorOverlayMessageId').html(LOCALIZED_DATA.SAME_BUNDLE21+' '+bund1Name.bold()+' '+LOCALIZED_DATA.SAME_BUNDLE22);
									}
							}

						}
						
						else if (data.actionType === "add" && data.productType === "service")
							{
								Nextel.Cart.prototype.updateCart(data);
								$('#errorOverlayMessageId').text(LOCALIZED_DATA.SAME_SERV);
							}
						else
							{
							Nextel.Cart.prototype.updateCart(data);
							$('#errorOverlayMessageId').text(LOCALIZED_DATA.MORE_DEV);
							}
					}
					Nextel.AddPlan.prototype.errorProductAdded();						
				}
			},
			error : function(XMLHttpRequest, textStatus, errorThrown) {

			}
		});
	},
	
	/**
	 * Check to see if the user has permissions to make this purchase
	 * @function
	 * @param {Object} purchase
	 */
	checkPermissions : function(purchase, url1) {

		var _tc = this;

		$("#" + Nextel.Cart.Constants.CART).data(purchase);
		$.ajax(
		{
			data : { },
			dataType : "json",
			contentType: "application/json; charset=utf-8",
			type : "post",
			url : "/NextelApp/checkout/checkout_check_permission.jsp",
			
			success : function(data) {					
				
				if(data.loggedIn === false)
				{
					var purchase = $("#" + Nextel.Cart.Constants.CART).data();
					Nextel.Cart.prototype.ajaxRequest(purchase);
				}
				else if(data.failureReason == "inactive" || data.failureReason == "accountInactive"  || data.failureReason == "suspended" || data.failureReason == "serviceUnavailable")
				{
					$('#asButtonUrl').bind('click', function() {
						Nextel.Cart.prototype.updateCart(data);
						Nextel.AddPlan.prototype.closeAPOverlay();
					});
					if(data.failureReason == "inactive")
					{
							$('#apOverlayMessageId').html(LOCALIZED_DATA.USR_INACTV);
					}
					else if(data.failureReason == "accountInactive" )
					{
							$('#apOverlayMessageId').html(LOCALIZED_DATA.ACT_INACTV);
					}
					else if(data.failureReason == "serviceUnavailable")
					{
							$('#apOverlayMessageId').html(LOCALIZED_DATA.SERV_UNAVL);
					}
					else if(data.failureReason == "suspended")
					{
					        $('#apOverlayMessageId').html(LOCALIZED_DATA.SUSPEND);
					}
					Nextel.AddPlan.prototype.buyASIM();	
				}
				else
				{	
				//alert("data.government :: "+data.government);
				//alert("data.segment :: "+data.segment);
				
					$('#csButtonUrl').unbind('click').bind('click', function(e) {										
						e.preventDefault();
						Nextel.OverlayView.prototype.closeOverlayView("#csOverlayCont");
						var purchase = $("#" + Nextel.Cart.Constants.CART).data();							
						Nextel.Cart.prototype.ajaxRequest(purchase);							
					});
					
					$('#apButtonUrl').unbind('click').bind('click', function(e) {
						e.preventDefault();
						Nextel.OverlayView.prototype.closeOverlayView("#permOverlayCont");
						var purchase = $("#" + Nextel.Cart.Constants.CART).data();							
						Nextel.Cart.prototype.ajaxRequest(purchase);							
					});
									
					if(data.commerceItemsCount == 0 && (data.segment == "CORPORATIVO" || data.segment == "VIP" || data.segment == "VIPTEL" || data.government == true))
					{
						$('#csOverlayMessageId').html(LOCALIZED_DATA.GOV_VIP1+'<br/>'+LOCALIZED_DATA.GOV_VIP2);
				      	Nextel.AddPlan.prototype.buyCoprorate();	
					}							
					else if (data.role === "root" && data.commerceItemsCount == 0) 
					{									
						if(data.childListStatus == "empty")
						{	
							Nextel.PermissionsDialog.prototype.openPDOverlay();
							_tc.assignPermLink(data.role,data);
						}else
						{								
							var len = data.childList.length;									
							if(len == 1)
							{									
								var purchase = $("#" + Nextel.Cart.Constants.CART).data();
								Nextel.Cart.prototype.ajaxRequest(purchase);
							}else{							
								Nextel.PermissionsDialog.prototype.openPDOverlay();
								_tc.assignPermLink(data.role,data);
							}
						}					
					}
					else if(data.role === "contract" && data.commerceItemsCount == 0)
					{	
				      	Nextel.PermissionsDialog.prototype.openPDContractOverlay();
						_tc.assignPermLink(data.role,data);
					}					
					else
					{						
						var purchase = $("#" + Nextel.Cart.Constants.CART).data();
						Nextel.Cart.prototype.ajaxRequest(purchase);
					}
				}
			}
		});
	},

	/**
	 * Event handler for Yes button in the Permissions modal dialog
	 * @function
	 */
	assignPermLink : function(role,data) {
		
		$("#permButtonsAdd .htmlBtn").unbind("click").bind("click", function(e) {
			e.preventDefault();
			Nextel.PermissionsDialog.prototype.closePDOverlay();			
			Nextel.PermissionsDialog.prototype.closePDContractOverlay();
			if(role === "contract" || role === "root")
			{
				var purchase = $("#" + Nextel.Cart.Constants.CART).data();
				Nextel.Cart.prototype.ajaxRequest(purchase);
			}			
			
		} );
	},
	/**
	 * Check to see if the customer belongs to a cost center
	 * @param {Object} purchase
	 */
	checkCostCenter : function(purchase,data) {
		var _tc = this;
		
		if (!data.childList) 
		{
				
				var purchase = $("#" + Nextel.Cart.Constants.CART).data();
				Nextel.Cart.prototype.ajaxRequest(purchase);
		} else {
			
				var i, j;
				var options = $("#whichCC option");
				for (j = 1; j < options.length; j++) {
					options.eq(j).remove();
				}
			
				for (i = 0; i < data.childList.length; i++) 
				{
				
					var option = "<option value='" + data.childList[i].costCenter + "'>" + data.childList[i].costCenter + "</option>";
					$("#whichCC").append(option);
				}
				var newsub = "<option value='new'>" + "New Subscriber" + "</option>";
				$("#whichCC").append(newsub);
				Nextel.OverlayView.prototype.openOverlayView("#assignCC");
				Nextel.Module.Manager.prototype.setCustomSelectValue("whichCC","");
		}
		
	},

	/**
	 * Function to handle cost center selection modal dialog
	 * @param {Object} e
	 */
	CCLink : function(e) {

		e.preventDefault();
		Nextel.Cart.prototype.setCartCookie($("#whichCC").val(), Nextel.Cart.Constants.CART_CC_COOKIE_NAME);
		$("#" + Nextel.Cart.Constants.CART).data("costcenter",  $("#whichCC").val());
		if (Nextel.Module.Manager.prototype.submitForm($("#" + Nextel.Cart.Constants.CART_CC_FORM))) {

			var purchase = $("#" + Nextel.Cart.Constants.CART).data();
			Nextel.Cart.prototype.ajaxRequest(purchase);
			Nextel.OverlayView.prototype.closeOverlayView("#assignCC");
		}
	},

	/**
	 * Grab the SKU for a product from the URL.
	 * @function
	 */
	getSKU : function(element) {
		var skureturn;
		var sku = $(element).attr("href", function() {
			var qs = $(this).attr("href").split("?");
			var pairs = qs[1].split("&");
			for (k=0; k < pairs.length; k++) {
				var test = pairs[k].split("=");
				if (test[0] === "item") {
					skureturn = test[1];
				}
			}
		});
		return skureturn;
	},
	/**
	 * Set the cookie for the session ID.
	 * @function
	 */
	setCartCookie : function(value, cn) {
		Nextel.Assistant.prototype.setCookie(cn,value,30);
	},
	/**
	 * Get the cookie for the session ID.
	 * @function
	 */
	getCartCookie : function(cn) {
		var value = Nextel.Assistant.prototype.getCookie(cn);
		return value;
	},
	/**
	 * Get the session ID from the cookie or set to null if it doesn't exist.
	 * @function
	 */
	getSessionID : function() {
		var sessionid = "";
		var sessionCookie = Nextel.Cart.prototype.getCartCookie(Nextel.Cart.Constants.CART_SESSION_COOKIE_NAME);
		if (sessionCookie.length > 0) {
			sessionid = sessionCookie;
		}
		return sessionid;
	},
	/**
	 * Get the cost center from the cookie or set to null if it doesn't exist.
	 * @function
	 */
	getCostCenter : function() {
		var costcenter = "";
		var costcenterCookie = Nextel.Cart.prototype.getCartCookie(Nextel.Cart.Constants.CART_CC_COOKIE_NAME);
		if (costcenterCookie.length > 0) {
			costcenter = costcenterCookie;
		}
		return costcenter;
	}
	
}


/**
 * This handles the Add to Cart button functionality, integrating it with the AJAX-based shopping cart.
 * @constructor
 **/
Nextel.AddToCart = function(){ this.init(); }

/**
 * Constants for the Add to Cart button.
 * @constant
 **/
Nextel.AddToCart.Constants = {
	CALL_ADDDEVICE : Nextel.Cart.prototype.addDevice,
	CALL_ADDPLAN : Nextel.Cart.prototype.addPlan,
	CALL_ADDPACKAGE : Nextel.Cart.prototype.addPackage,
	CALL_ADDSIM : Nextel.Cart.prototype.addSIM,
	CALL_ADDSERVICE : Nextel.Cart.prototype.addServices,
	CART_COOKIE_NAME : "cartopened"
}

Nextel.AddToCart.prototype = {
	_c: Nextel.AddToCart.Constants,
	/**
	 * Init function initializes the Add to Cart button functionality.
	 * @function
	 **/
	init:function(){
		
		this.bindAddToCartButtons();
	},
	/**
	 * bindAddToCartButtons function hijacks the click function of the Add to Cart buttons to add items to the shopping cart.
	 * @function
	 **/
	bindAddToCartButtons:function(){
		$("a.cartIcon,a.cartIcon2").bind("click",function(e){
			e.preventDefault();
			e.stopPropagation();
			Nextel.Cart.prototype.addItems(this);
			//Nextel.AddToCart.prototype.checkForFirstAdd();
		});
	},
	/**
	 * checkForFirstAdd function checks to see if this is the first item added to the cart, and if so, display the shopping cart.
	 * @function
	 **/
	checkForFirstAdd:function(){
        
		var cn = Nextel.AddToCart.Constants.CART_COOKIE_NAME;
		var cookie = Nextel.Assistant.prototype.getCookie(cn);
		if (cookie.length === 0) {
			Nextel.Assistant.prototype.setCookie(cn,1);
			Nextel.Cart.prototype.showCart();
		}
	},
	/**
	 * Support for Flash list view
	 * @param {Object} sku
	 */
	addToCartFromFlash:function(sku){		
		var element = "";
		
		$(".listViewButtons a.cartIcon").each(function(){
			var ss=$(this).attr('href');
			if( ss.indexOf('item='+sku) != -1 )
			element = $(this);
		});
		Nextel.Cart.prototype.addItems(element);
		Nextel.AddToCart.prototype.checkForFirstAdd();
	}
}

/**
 * Nextel.Overlay managing all the functionality of overlay.
 * @constructor
 */
Nextel.Overlay = function(overlay_id) { 
	if (arguments[1] != null) {
		this.init(overlay_id, arguments[1]);
	} else {
		
		this.init(overlay_id); 
	}
}

/**
 * Define all the constants that will be used for Nextel.Overlay.
 * @constant
 */
Nextel.Overlay.Constants = {

	CONTENT_CLASS : "overlayContent",
	INITIAL_CLASS : "overlayInitial",
	LOADING_CLASS : "overlayLoading",
	MESSAGE_CLASS : "overlayMessage",
	DISPLAY_MESSAGE_CLASS : "overlayMessageDisplay",
	SUCCESS_CLASS : "overlaySuccess",
	OVERLAY_CLASS : "overlay",
	OVERLAY_BTN : "overlayBtn",
	OVERLAY_RESET_DEFAULT_BTN : "defaultViewBtn"	
} 

Nextel.Overlay.prototype = {
	_c : Nextel.Overlay.Constants,
	_overlay : null,
	
	/**
	 * Attach click event to different links and button for overlays.
	 * @function
	 */
	init : function(overlay_id) {
		
		var o_class = (arguments[1] != null) ? arguments[1] : overlay_id;
		
		$('.' + o_class).bind('click', overlay_id, function(){
			Nextel.Overlay.prototype.showOverlay(overlay_id, this);
		});
		
		$('#' + overlay_id + ' .' + this._c.OVERLAY_RESET_DEFAULT_BTN).bind('click', overlay_id, function(){
			Nextel.Overlay.prototype.resetOverlay(overlay_id);
		});
		
		var tc = this;
		$('.' + this._c.OVERLAY_BTN).bind('click', tc, function(){
			tc.hideOverlay(); //hide overlay
		});		
		
		this.addFormSubmitEvt(); //attach submit event
		
	},
	/**
	 * Reset overlay to its initial state.
	 * @param {String} overlayID The ID of overlay
	 * @function
	 */
	resetOverlay : function(overlayID) {
		var contObj = $('#' + overlayID);
		contObj.find('.' + this._c.SUCCESS_CLASS).addClass('displaynone');	
		contObj.find('.' + this._c.MESSAGE_CLASS).addClass('displaynone');
		contObj.find('.' + this._c.INITIAL_CLASS).removeClass('displaynone');
	}, 
	/**
	 * Show overlay based on object id.
	 * @param {String} overlayID The ID of overlay
	 * @param {String} objID The object that was triggered to display the overlay
	 * @function
	 */
	showOverlay : function(overlayID, objID) {
		var el = $('#' + overlayID);
		this.hideOverlay(el);
		var wrapper_pos = $('#globalNav').position();
		var trigger_pos = $(objID).position();
		var trigger_width = parseInt($(objID).width());	
		var trigger_height = parseInt($(objID).height());	
	
		var marginLeft = trigger_pos.left + trigger_width - wrapper_pos.left - parseInt(el.width()) + 10;
		var marginTop = trigger_pos.top + trigger_height - parseInt(el.height()) + 15;
		
		if (marginTop < 0) {
			marginTop = 5;
		}
		else if (overlayID == "addReviewCont") { marginLeft = 0; marginTop = -20; }
		
		el.css({'margin-left' : marginLeft + 'px', 'top' : (marginTop + parseInt(el.height())) + 'px', 'opacity' : 0});
		el.animate({'opacity' : 1, 'top' : marginTop + 'px', height : 'toggle'}, 500, function() { 
			;
		});
		
	},

	 /**
	 * This function will hide any overlay that is currently visible to the user.
	 * @function
	 */
	hideOverlay : function() {
		$("form").each(function() {
			if($(this).attr('id')=='passwordReminderForm') {
		 		var inputFields = $(this).find('.inputField');
			 	for (var i=0, t=inputFields.length; i<t; i++) {
				 	var field = inputFields[i];
					$(field).val("");
					Nextel.Module.Manager.prototype.removeErrorStyle(field);
			 	}
		 	}
		});
		if (arguments[0] == null) {
			if($(".overlayBtn").hasClass("smsClose")) {
				var overlayItem = $("#managePinOverlayType");
				if(overlayItem!=null) {
					var overlayItemVal = overlayItem.val();
					if(overlayItemVal=="managePin") {
						$("#overlayResendFail").fadeOut(300);
					} else {
						$("#smsWidget").fadeOut(300);
					}
				} else {
					$("#smsWidget").fadeOut(300);
				}
			} else {
				$('.' + this._c.OVERLAY_CLASS).fadeOut(300);
			}
		} else {
			var oc = $('.' + this._c.OVERLAY_CLASS);
			for (var i=0; i<oc.length; i++) {
				if (oc[i] != arguments[0]) {
					$(oc[i]).fadeOut(300);
				}
			}
		}
	},
	/**
	 * This function attach submit event to html button and form.
	 * @function
	 */
	addFormSubmitEvt : function() {
		
		var tc = this;	
		$('.' + this._c.OVERLAY_CLASS).each(function(){
		
			if (!$(this).hasClass('forgotOverlay')) {
				var form = $(this).find('form');
				var contObj = $(this);
				form.bind('submit', [tc, contObj] , function(event){ //attach submit event
					event.preventDefault(); //stop form from submit
					if (Nextel.Module.Manager.prototype.submitForm(this)) { //validate form
						tc.ajaxRequest($(this), 
							contObj.find('.' + tc._c.SUCCESS_CLASS), 
							contObj.find('.' + tc._c.MESSAGE_CLASS), 
							contObj, 
							contObj.find('.' + tc._c.LOADING_CLASS),
							contObj.find('.' + tc._c.INITIAL_CLASS));
						//tc.ajaxRequest($(this), tc._c.UN_SUCCESS_ID, tc._c.UN_MESSAGE_ID, tc._c.UN_OVERLAY_ID, tc._c.UN_LOADING_ID); //ajax request
					}
					return false;
				});
			
				form.each(function() {
					var f = $(this);
					$(this).find('.htmlSubmit').bind('click', [tc, contObj, f], function(event){
						event.preventDefault();
						if (Nextel.Module.Manager.prototype.submitForm(f)) { //validate form
							tc.ajaxRequest(f, 
								contObj.find('.' + tc._c.SUCCESS_CLASS), 
								contObj.find('.' + tc._c.MESSAGE_CLASS), 
								contObj, 
								contObj.find('.' + tc._c.LOADING_CLASS),
								contObj.find('.' + tc._c.INITIAL_CLASS));
							//tc.ajaxRequest(form, tc._c.UN_SUCCESS_ID, tc._c.UN_MESSAGE_ID, tc._c.UN_OVERLAY_ID, tc._c.UN_LOADING_ID); //ajax request
						}
						return false;
					});	
				});
			}
		});
	},
	/**
	 * This function gets called after form validation, make ajax request.
	 * @param {Form} el Form element that is being submit
	 * @param {Object} successObj Content to display after success AJAX call
	 * @param {Object} messageOBJ Content to display when AJAX failed
	 * @param {Object} contObj Current Container of the content
	 * @param {Object} loadingObj Content to display when making AJAX call
	 * @param {Object} initialObj The initial form
	 * @function
	 */
	ajaxRequest : function(el, successObj, messageObj, contObj, loadingObj, initialObj) 
	{
	
	var mess = el.attr('id');
			
		$(contObj).find(".overlayContent").addClass('displaynone'); //hide form
		$(loadingObj).removeClass('displaynone'); //show loading message
		
		
		if(el.attr('id') != 'passwordReminderForm')
		{
		//make actual request
		$.post((el.attr('action') + "?ajax=true&rand=" + Math.random()), el.serialize(), function(data){
			$(loadingObj).addClass('displaynone'); //hide loading message
			if (data == 'success') { //return success
				$(messageObj).addClass('displaynone'); //hide message
				if ($(el).attr('id') == "smsForm") {
					$('.userPhoneNumber').html($('#phoneNumber').val());
				}
				$(successObj).removeClass('displaynone'); //show success message
				document.getElementById(el.attr('id')).reset();
			}
			else { //error
				var messageDisplayCont = messageObj.find('.' + Nextel.Overlay.Constants.DISPLAY_MESSAGE_CLASS);
				if (messageDisplayCont == null || typeof(messageDisplayCont) == undefined) {
					messageDisplayCont = messageObj;
				}
				
				$(messageDisplayCont).html('<h5>' + data + "</h5>");
				$(messageObj).removeClass('displaynone');
			}
			
			//after display message, hide overlay in 2500 ms, then reset the form to original state
			if ($(el).attr('id') != "smsForm" && $(el).attr('id') != "addBankDebit") {
				_resetTimer = setTimeout(function(){
					$(contObj).fadeOut(300).delay(1000).queue(function () {
						$(initialObj).removeClass('displaynone');	
						$(messageObj).addClass('displaynone');
						$(successObj).addClass('displaynone');	
						$(this).dequeue();
					})
				}, 2500);
			}
			
		});
		
		}else
		{
		
		$(loadingObj).addClass('displaynone'); //hide loading message
		}		
			
	}	
}
/**
 * The common functions for the overlay view that is used globally.
 * @constructor
 */
Nextel.OverlayView = function(){ this.init(); }
Nextel.OverlayView.prototype = {
	init : function() {
	},
	/**
	 * Shows the overlay which is passed in as a parameter.
	 * @function
	 **/
	openOverlayView : function(t) {
		
	          $(t).fadeIn("fast");
	          var theOffset = $(window).scrollTop()+120;			  
             $(".overlayContainer").css('top',theOffset);
             $("body").css('overflow','visible');
	},
	/**
	 * Hides the overlay which is passed in as a parameter.
	 * @function
	 **/
	closeOverlayView : function(t) {
		$(t).fadeOut("fast");
	}
};

/**
 * The Region Selector overlay view.
 * @constructor
 */
Nextel.RegionSelector = function() { this.init(); }
/**
 * Constants for Nextel.RegionSelector
 * @constant
 */
Nextel.RegionSelector.Constants = {
//	RS_BUTTON: ".loginZipCont a",
	RS_CLOSE_BTN_CLASS: "rsCloseBtn",
	RS_BG_CLASS: "regionSelector",
	RS_CONFIRM_CANCEL_BTN: "rsConfirmCancelBtn",
	RS_CONFIRM_CONT_BTN: "rsConfirmButton a.htmlBtn",
	RS_CONFIRM_WRAPPER: "rsConfirm",
	RS_CHANGE_WRAPPER: "rsChange",
    RS_REGION_CLOSE: "closeBtn_overlay" 
};
Nextel.RegionSelector.prototype = {
	_c : Nextel.RegionSelector.Constants,
	/**
	 * Binds the interactions for the region selector overlay.
	 * @function
	 **/
	init : function() {
		if( typeof(RS_ZIP_DEFAULT_MESSAGE) == undefined )
			var RS_ZIP_DEFAULT_MESSAGE = "";
		$(this._c.RS_BUTTON).bind("click", this.openRSOverlay);
		$("."+this._c.RS_CONFIRM_CANCEL_BTN).bind("click", this.closeRSOverlay);
		$("."+this._c.RS_CLOSE_BTN_CLASS).bind("click", this.closeRSOverlay);
		$("#"+this._c.RS_REGION_CLOSE).bind("click", this.closeRSOverlay);
		$("."+this._c.RS_BG_CLASS).bind("click", this.closeRSOverlay);
		$("#"+this._c.RS_CONFIRM_CONT_BTN).bind("click",this.confirmContinue);
	},
	/**
	 * Closes the region selector overlay.
	 * @function
	 **/
	closeRSOverlay : function() {
		$(window).unbind('scroll');
		Nextel.OverlayView.prototype.closeOverlayView("#regionSelector");
	},
	/**
	 * Resets the overlay state to 'Confirm' and then shows it.
	 * @function
	 **/
	openRSOverlay : function() {
		$(window).bind('scroll', function(){
			scroll(0,0);
		})
		Nextel.RegionSelector.prototype.resetView();
		Nextel.OverlayView.prototype.openOverlayView("#regionSelector");
		return false;
	},
	/**
	 * Hides the 'Confirm' state and shows the 'Change' state of the region selector.
	 * @function
	 **/
	confirmContinue : function() {
		$("#"+Nextel.RegionSelector.Constants.RS_CONFIRM_WRAPPER).fadeOut("fast");
		$("#"+Nextel.RegionSelector.Constants.RS_CHANGE_WRAPPER).fadeIn("fast");
	},
	/**
	 * Resets the region selector overlay by hiding the 'Change' state and showing the 'Confirm' state.
	 * @function
	 **/
	resetView : function() {
		$("#"+Nextel.RegionSelector.Constants.RS_CONFIRM_WRAPPER).show();
		$("#"+Nextel.RegionSelector.Constants.RS_CHANGE_WRAPPER).hide();
	},
	/**
	 * Display change view.
	 * @function
	 */
	showChangeView : function() {
	$(window).bind('scroll', function(){
			scroll(0,0);
		})
		$("#"+Nextel.RegionSelector.Constants.RS_CHANGE_WRAPPER).show();
		Nextel.OverlayView.prototype.openOverlayView("#regionSelector");
	}
};

/**
 * The Add a Plan overlay view.
 * @constructor
 */
Nextel.AddPlan = function() { this.init(); }
/**
 * Constants for Nextel.AddPlan
 * @constant
 */
Nextel.AddPlan.Constants = {
	AP_CLOSE_BTN_CLASS: "nb",
	CS_CLOSE_BTN_CLASS: "cs",
	AP_BG_CLASS: "apOverlayCont",
	AP_BODY : "apOverlayBody",
	AS_BODY : "asOverlayBody",
	CS_BODY : "csOverlayBody",
	errorBody: "overlayAddSrv",
	AP_PLANS : "plans"
};
Nextel.AddPlan.prototype = {
	_c : Nextel.AddPlan.Constants,
	/**
	 *  Binds the interactions for the add plan overlay.
	 * @function
	 **/
	init : function() {
		$("."+this._c.AP_CLOSE_BTN_CLASS).bind("click", this.closeAPOverlay);
		$("." + this._c.AP_PLANS + " #"+this._c.AP_BODY+" ."+this._c.AP_CLOSE_BTN_CLASS).unbind("click").bind("click", this.buyASIM);
		$("." + this._c.AP_PLANS + " #"+this._c.AP_BODY+" ."+this._c.AP_CLOSE_BTN_CLASS).unbind("click").bind("click", this.buyAPLAN);
		$("." + this._c.AP_PLANS + " #"+this._c.CS_BODY+" ."+this._c.CS_CLOSE_BTN_CLASS).unbind("click").bind("click", this.buyCoprorate);
		$("." + this._c.AP_PLANS + " #"+this._c.errorBody+" ."+this._c.CS_CLOSE_BTN_CLASS).unbind("click").bind("click", this.errorProductAdded);
		$("."+this._c.AP_BG_CLASS).bind("click", this.closeAPOverlay);
	},
	/**
	 * Closes the add plan overlay.
	 * @function
	 **/
	closeAPOverlay : function() {
		Nextel.OverlayView.prototype.closeOverlayView("#apOverlayCont");
		Nextel.OverlayView.prototype.closeOverlayView("#csOverlayCont");
		Nextel.OverlayView.prototype.closeOverlayView("#overlayAddSrv");
		return false;
	},
	/**
	 * Shows the add plan overlay.
	 * @function
	 **/
	openAPOverlay : function() {
		var _c = Nextel.AddPlan.Constants
		$("#"+_c.AS_BODY).hide();		
		$("#"+_c.AP_BODY).show();
		Nextel.OverlayView.prototype.openOverlayView("#apOverlayCont");
		return false;
	},
	buyASIM : function() {
		var _c = Nextel.AddPlan.Constants
		$("#"+_c.AP_BODY).hide();				
		$("#"+_c.AS_BODY).show();
		
		Nextel.OverlayView.prototype.openOverlayView("#apOverlayCont");
		return false;
	},
	buyAPLAN : function() {
		var _c = Nextel.AddPlan.Constants
		$("#"+_c.AP_BODY).hide();				
		$("#"+_c.AS_BODY).show();
		Nextel.OverlayView.prototype.openOverlayView("#apOverlayCont");
		return false;
	},
	errorProductAdded : function() {	
		var _c = Nextel.AddPlan.Constants
		$("#"+_c.AP_BODY).hide();
		$("#"+_c.AS_BODY).hide();
		$("#errorProductId").show();
		Nextel.OverlayView.prototype.closeOverlayView("#apOverlayCont");
		Nextel.OverlayView.prototype.openOverlayView("#overlayAddSrv");		
		return false;
	},
	buyCoprorate : function() {
		var _c = Nextel.AddPlan.Constants		
		$("#"+_c.CS_BODY).show();		
		Nextel.OverlayView.prototype.openOverlayView("#csOverlayCont");
		return false;
	}
};

/**
 * The Add a Plan overlay view.
 * @constructor
 */
Nextel.CoverageCheck = function() { this.init(); }
/**
 * Constants for Nextel.AddPlan
 * @constant
 */
Nextel.CoverageCheck.Constants = {
	
	AS_BODY : "asOverlayBody",
	COVERAGE_BTN : "coveragePostalCode"
	
};
Nextel.CoverageCheck.prototype = {

	_c : Nextel.CoverageCheck.Constants,
	/**
	 *  Binds the interactions for the add plan overlay.
	 * @function
	 **/
	init : function() {
	
		$("#coverageSubmit").bind("click",this.closeValidateCoverageOverlay);
		$("#coveragePostalCode").bind("click",this.validatCoverage);
	},
		
	validatCoverage : function() {
	
	var inputCep = $("#coveragePostalCodeInput").val();	
	if(!(inputCep.length == 5 || inputCep.length ==8))
	{
		$('#apOverlayMessageId').text(LOCALIZED_DATA.CEP_VAL);
		var _c = Nextel.AddPlan.Constants
		$("#"+_c.AS_BODY).show();
		Nextel.OverlayView.prototype.openOverlayView("#coverageOverlayCont");
		return false;
	}
	
	var ajax_url = "/NextelApp/checkout/fragments/checkout_validate_cep.jsp";
	var postal_code = $("#coveragePostalCodeInput" ).val();	
	$("#loading_validate_coverage").fadeIn();
	
	$.ajax(
		{			
			url: ajax_url,
			data:
			{
				cepcode:postal_code,
				ajax_call: true	
			},
			dataType: 'json',
			contentType: "application/json; charset=utf-8",
			success: function(message)
			{
											
				$("#loading_validate_coverage").fadeOut();
				if(message.coverageStatus == true){
						if(message.stateSame == true)
						{	
							$('#apOverlayMessageId').text(LOCALIZED_DATA.CEP_TRUE);
							
						}else
						{
							$('#apOverlayMessageId').text(LOCALIZED_DATA.CEP_FALSE);
						}
				}	
				else{
					$('#apOverlayMessageId').text(LOCALIZED_DATA.CEP_MSG);					
				}
								
				var _c = Nextel.AddPlan.Constants
				$("#"+_c.AS_BODY).show();
				Nextel.OverlayView.prototype.openOverlayView("#coverageOverlayCont");
				return false;
				
			},
			error: function(message)
			{
				$("#loading_validate_coverage").fadeOut();
				$('#apOverlayMessageId').html('Pedimos desculpas! Por favor, tente novamente mais tarde.');
				
				var _c = Nextel.AddPlan.Constants
				$("#"+_c.AS_BODY).show();
				Nextel.OverlayView.prototype.openOverlayView("#coverageOverlayCont");
				return false;
			}
		});		
	},
	closeValidateCoverageOverlay : function() {
		
		$("#coverageOverlayCont").fadeOut();
	}	
};


/**
 * To Check valid Nextel Number.
 * @constructor
 */
Nextel.ValidateNextelNumber = function() { this.init(); }
/**
 * Constants for Nextel.ValidateNextelNumber
 * @constant
 */
Nextel.ValidateNextelNumber.Constants = {
	
	AS_BODY : "asOverlayBody"	
	
};
Nextel.ValidateNextelNumber.prototype = {

	_c : Nextel.ValidateNextelNumber.Constants,
	/**
	 *  Binds the interactions for the add plan overlay.
	 * @function
	 **/
	init : function() {
		$("#coverageSubmit").bind("click",this.closeValidateprePaidPhoneOverlay);
		$("#nextelPhoneNumber").bind("click",this.validateNextelNumber);	
		$("#nextelNumber").val("");	
		$('.rechargeamount').css({'visibility': 'hidden'});		
		$('#nextelNumberErr').css({'visibility': 'hidden'});
		
		$("#nextelNumber").keypress(function(evt) {
		$('.rechargeamount').css({'visibility': 'hidden'});
		$('#nextelNumberErr').css({'visibility': 'hidden'});
  		var charCode = (evt.which) ? evt.which : event.keyCode
			if (charCode > 31 && (charCode < 48 || charCode > 57))
			{
				return false;
			}		
				return true;
		});
	},
		
	validateNextelNumber : function() {	
	var input_Nextel_Number = $("#nextelNumber").val();		
	if(input_Nextel_Number.length < 10)
	{						
		//$('#apOverlayMessageId').html('Enter a 12 digit number');		
		//$("#nextelNumber").val("");	
		//var _c = Nextel.ValidateNextelNumber.Constants
		//$("#asOverlayBody").show();
		//Nextel.OverlayView.prototype.openOverlayView("#coverageOverlayCont");
		$('#nextelNumberErr').css({'visibility': 'visible'});		
		$('#nextelNumberErr').text(LOCALIZED_DATA.GIFT_REC3);
		return false;
	}
	
	var ajax_url = "/NextelApp/user/gift_credit_validate_nextel_number.jsp";
	$("#loading_validate_coverage").fadeIn(10);	
	$.ajax(
		{			
			url: ajax_url,
			data:
			{
				nextelNumber:input_Nextel_Number,
				ajax_call: true	
			},
			dataType: 'json',
			contentType: "application/json; charset=utf-8",			
			success: function(message)
			{	
				$("#loading_validate_coverage").fadeOut(10);
				if(message.prepaidPhone == true)
				{									
					//$('#apOverlayMessageId').html('Valid Nextel Number');
					$('.rechargeamount').css({'visibility': 'visible'});
					$('#nextelNumberErr').css({'visibility': 'hidden'});
					//var _c = Nextel.ValidateNextelNumber.Constants
					//$("#"+_c.AS_BODY).show();
					//Nextel.OverlayView.prototype.openOverlayView("#coverageOverlayCont");					
				}else
				{					
					$('#nextelNumberErr').css({'visibility': 'visible'});		
					$('#nextelNumberErr').text(LOCALIZED_DATA.GIFT_REC1);
					$('.rechargeamount').css({'visibility': 'hidden'});
				}					
				
				return false;
				
			},
			error: function(message)
			{							
				$("#loading_validate_coverage").fadeOut(10);
				$('.rechargeamount').css({'visibility': 'hidden'});
				$('#nextelNumberErr').css({'visibility': 'visible'});					
				$('#nextelNumberErr').text(LOCALIZED_DATA.GIFT_REC2);
				return false;
			}
		});		
	},	
	
	closeValidateprePaidPhoneOverlay : function() {		
		$("#coverageOverlayCont").fadeOut(10);
	}		
	
};







/**
 * The Permissions Dialog overlay view.
 * @constructor
 */
Nextel.PermissionsDialog = function() { this.init(); }
/**
 * Constants for Nextel.PermissionsDialog
 * @constant
 */
Nextel.PermissionsDialog.Constants = {
	PD_CLOSE_BTN_CLASS: "nb",
	PD_BG_CLASS: "permOverlayCont",
	PD_BG_CONTRACT_CLASS: "permOverlayContForContract"
};
Nextel.PermissionsDialog.prototype = {
	_c : Nextel.PermissionsDialog.Constants,
	/**
	 *  Binds the interactions for the add plan overlay.
	 * @function
	 **/
	init : function() {
		$("."+this._c.PD_CLOSE_BTN_CLASS).bind("click", this.closePDOverlay);
		$("."+this._c.PD_BG_CLASS).bind("click", this.closePDOverlay);		
		$("."+this._c.PD_BG_CONTRACT_CLASS).bind("click", this.closePDContractOverlay);
	},
	/**
	 * Closes the add plan overlay.
	 * @function
	 **/
	closePDOverlay : function() {
		Nextel.OverlayView.prototype.closeOverlayView("#" + Nextel.PermissionsDialog.Constants.PD_BG_CLASS);
		return false;
	},
	/**
	 * Shows the add plan overlay.
	 * @function
	 **/
	openPDOverlay : function() {
		Nextel.OverlayView.prototype.openOverlayView("#" + Nextel.PermissionsDialog.Constants.PD_BG_CLASS);
		return false;
	},
	/**
	 * Closes the add plan overlay.
	 * @function
	 **/
	closePDContractOverlay : function() {	
		Nextel.OverlayView.prototype.closeOverlayView("#" + Nextel.PermissionsDialog.Constants.PD_BG_CONTRACT_CLASS);
		return false;
	},
	/**
	 * Shows the add plan overlay.
	 * @function
	 **/
	openPDContractOverlay : function() {
		Nextel.OverlayView.prototype.openOverlayView("#" + Nextel.PermissionsDialog.Constants.PD_BG_CONTRACT_CLASS);
		return false;
	}
};

/**
 * The Simple Dialog overlay view.
 * @constructor
 */
Nextel.SimpleDialog = function(closeBtn,wrapper) { this.init(closeBtn,wrapper); }

Nextel.SimpleDialog.prototype = {
	/**
	 *  Binds the interactions for the add plan overlay.
	 * @function
	 **/
	init : function(closeBtn,wrapper) {
		$("."+closeBtn).bind("click", function(e){
			e.preventDefault();
			Nextel.SimpleDialog.prototype.closePDOverlay(e,$(this).parents(".overlayContainer").attr("id"));
		});
		$("#"+wrapper).bind("click", function(e){
			Nextel.SimpleDialog.prototype.closePDOverlay(e,$(this).attr("id"));
		});
		$("."+closeBtn).bind("click", function(e){
			e.preventDefault();
			Nextel.SimpleDialog.prototype.closePDContractOverlay(e,$(this).parents(".overlayContainer").attr("id"));
		});
		$("#"+wrapper).bind("click", function(e){
			Nextel.SimpleDialog.prototype.closePDContractOverlay(e,$(this).attr("id"));
		});
	},
	/**
	 * Closes the add plan overlay.
	 * @function
	 **/
	closePDOverlay : function(e,wrapper) {
		Nextel.OverlayView.prototype.closeOverlayView("#" + wrapper);
		return false;
	},
	/**
	 * Shows the add plan overlay.
	 * @function
	 **/
	openPDOverlay : function(wrapper) {
		Nextel.OverlayView.prototype.openOverlayView("#" + wrapper);
		return false;
	},
	/**
	 * Closes the add plan overlay.
	 * @function
	 **/
	closePDContractOverlay : function(e,wrapper) {
		Nextel.OverlayView.prototype.closeOverlayView("#" + wrapper);
		return false;
	},
	/**
	 * Shows the add plan overlay.
	 * @function
	 **/
	openPDContractOverlay : function(wrapper) {
		Nextel.OverlayView.prototype.openOverlayView("#" + wrapper);
		return false;
	}
};


/** 
 *Nextel.Scroll is managing product catelog promo and plan catelog promo on the homepage. 
 *@constructor 
 */
 Nextel.Scroll = function() { ; }

/**
 * Define all the constants for Nextel.Scroll include class name and elements for attach event. 
 * @constant
 */
Nextel.Scroll.Constants = {
	SM_CLASS : 'carouselModule',
	LEFT_ARROW : 'carouselModuleLeft',
	RIGHT_ARROW : 'carouselModuleRight', 
	IMG_WIDTH : 340
};

Nextel.Scroll.prototype = {
	_c : Nextel.Scroll.Constants,
	_infinite : null,
	_width : null,
	_imgPerScroll : null,
	_wrapCont : null,

	/** 
	 * Attach mouseover and mouseout event to promo boxes. This function also calls
	 * functions for attach event to the left and right scroll arrows.
	 * @param {Boolean} isInfinite Does this carousel has infinite loop
	 * @param {Integer} width the width of the item
	 * @param {Integer} imgNum the number of image per scroll
	 * @function
	 */
	init : function(isInfinite, width, imgNum) {
	
		this._infinite = isInfinite;
		this._width = width;
		this._imgPerScroll = imgNum;
	
		this._wrapCont = (arguments[3] != null && arguments[3] != undefined) ? arguments[3] : '';
		var moduleObj = '.' + Nextel.Scroll.Constants.SM_CLASS;
		
		if (this._wrapCont != '') {
			moduleObj = '#' + this._wrapCont + ' ' + moduleObj;
		}
		
		this._moduleObj = $(moduleObj);
		var ns = this;
		//change promo background on mouseover
		$(moduleObj).hover(function() {
			$(this).addClass('carouselModuleHover');			
		}, function() {
			$(this).removeClass('carouselModuleHover');
		}).each(function(i) {
		
			//create infinite loop effect
			var lis = $(this).find('.carouselItem');
			ns._totalImage = lis.length;
			if (lis.length <= ns._imgPerScroll) { return 1; } //if only one promo, break
						
			if (ns._infinite) {
				var firstEl = $(this).find('li.carouselItem:eq(0)'); //first product
				var lastEl = $(this).find('li.carouselItem:last-child'); //last product
				
				firstEl.before(lastEl.clone(true));	//insert last element before first element	
				firstEl.clone(true).appendTo($(this).find('.carouselList')); //append first element
				lis = $(this).find('.carouselItem'); //find product list
				
				$(this).find('.carouselModuelController').css({'visibility': 'visible'}); //show left and right arrows
				
				//set width and show the first element in carousel
				$(this).find('.carouselList').css({'width': (ns._width * lis.length + 'px'), 'margin-left' : (-1 * ns._width) + 'px'});
			}
			else {
				$(this).find('.carouselList').css({'width': (ns._width * lis.length + 'px')});
				$(this).find('.' + ns._c.RIGHT_ARROW).css({'visibility' : 'visible'});	
				$(this).find('.' + ns._c.LEFT_ARROW).css({'visibility' : 'visible'}).addClass('disabledLeft');				
			}	
			
			$(this).find('.currentCarouselItem').html('1/' + ns._totalImage);
					
			//attach click event, if user click on the promo box, take them to the product detail page
			$(this).find('.carouselInner').bind('click', ns, function() {
				var ul = $(this).parent().find('.carouselList');
				var ml = parseInt(ul.css("margin-left"));
				var c_inx = Math.abs(Math.round(ml / ns._width));
				var url = $(this).find('.carouselModuleLink:eq(' + c_inx + ')').attr('href');
				if (url != null && url != undefined) {
					document.location = url;
				}
			});
		});		
		
		this.setLeftArrow($(moduleObj).find('.' + this._c.LEFT_ARROW), ns); //set left arrow event
		this.setRightArrow($(moduleObj).find('.' + this._c.RIGHT_ARROW), ns); //set right arrow event
		
	},
	
	/**
	 * Attach mouse events to left arrow, on arrow click, show the previous product.
	 * If it is that first product, show the last product.
	 * @param {Object} arrowObj the left arrow
	 * @param {Nextel.Scroll} ns the current object
	 * @function
	 */
	setLeftArrow : function(arrowObj, ns) {
		arrowObj.bind('click', ns, function() {
			var ul = $(this).parent().find('.carouselList');
			var ml = parseInt(ul.css("margin-left"));
			var new_ml = ml + (ns._width * ns._imgPerScroll);
			
			if (new_ml >= 0) {
				new_ml = 0;
				if (!ns._infinite) {
					$(this).parent().find('.' + ns._c.LEFT_ARROW).addClass('disabledLeft');	
				}
			}			
			
			$(this).parent().find('.' + ns._c.RIGHT_ARROW).removeClass('disabledRight');

			$(this).unbind('click');
			ul.animate({"margin-left": new_ml + "px"}, "slow", 'easeOutQuart', function(){
				ns.setLeftArrow($(this).parent().parent().find('.' + ns._c.LEFT_ARROW), ns);
				$(this).parent().parent().find('.currentCarouselItem').html( (Math.abs(new_ml)/ns._width + 1) + '/' + ns._totalImage);
				if (ns._infinite) {								
					ns.swapCarouselContent(this, 'left', ns);
				}
				//ns.updateCarouselInfo(ns, new_ml);
			});		
		});
	},
	
	/**
	 * This function will display image based on what the parameter user pass in.
	 * @param {Integer} inx
	 * @function
	 */
	showItemByInx : function(inx) {
		this._moduleObj.find('.carouselList').css({'margin-left': (-1 * this._width * (inx)) + 'px'});
		this._moduleObj.find('.carouselDisplayInfo').html((inx+1) + '/' + this._totalImage);
	},

	/**
	 * Attach mouse events to right arrow, on arrow click, show the next product.
	 * If it is that last product, show the first product.
	 * @param {Object} arrowObj the right arrow
	 * @param {Nextel.Scroll} ns the current object
	 * @function
	 */	
	setRightArrow : function(arrowObj, ns) {	
	
		arrowObj.bind('click', ns, function() {
			var ul = $(this).parent().find('.carouselList');
			var ml = parseInt(ul.css("margin-left"));
			var new_ml = ml - (ns._width * ns._imgPerScroll);
			var maxWidth = -1 * ((parseInt(ul.css("width"))) - (ns._width * ns._imgPerScroll));
			if (new_ml <= maxWidth) {
				new_ml = maxWidth;
				if (!ns._infinite) {
					$(this).parent().find('.' + ns._c.RIGHT_ARROW).addClass('disabledRight');	
				}
			}
			
			if (!ns._infinite) {
				$(this).parent().find('.' + ns._c.LEFT_ARROW).removeClass('disabledLeft');	
			}
						
			$(this).unbind('click');
			ul.animate({"margin-left": new_ml  + "px"}, "slow", 'easeOutQuart', function(){
				ns.setRightArrow($(this).parent().parent().find('.' + ns._c.RIGHT_ARROW), ns);
				$(this).parent().parent().find('.currentCarouselItem').html( (Math.abs(new_ml)/ns._width + 1) + '/' + ns._totalImage);
				if (ns._infinite) {
					ns.swapCarouselContent(this, 'right', ns);		
				}	
				//ns.updateCarouselInfo(ns, new_ml);
			});
						
		});		
	},
	/**
	 * Update the index of current image.
	 * @param {Nextel.Scroll} ns the current object
	 * @param {Integer} new_ml new value for margin left
	 * @function
	 */
	updateCarouselInfo : function(ns, new_ml) {
		ns._moduleObj.find('.carouselDisplayInfo').html((Math.abs(parseInt(new_ml/ns._width)) + 1) + '/' + ns._totalImage);				
	}, 
	
	/**
	 * Swap carousel content if it's last item or first item for infinite loop effect.
	 * @param {Object} obj Current carousel object
	 * @param {String} direction left or right
	 * @param {Nextel.Scroll} ns the current object
	 * @function
	 */
	swapCarouselContent : function(obj, direction, ns) {
		var ml = Math.abs(parseInt($(obj).css('margin-left')));
		if (direction == 'left') {
			if (ml == 0)
				$(obj).css({'margin-left' : (ns._width * -($(obj).find('li.carouselItem').length-2)) + 'px'})		
		}
		else if (ml == (parseInt($(obj).css('width'))-ns._width)) {
			$(obj).css({'margin-left': (-1) * ns._width + 'px'});
		}
	}
}



/**
 * Nextel.ExpandCollapse is a class that's handling the expand and collapse functionality.
 * @constructor
 */ 
Nextel.ExpandCollapse = function() { ; }

Nextel.ExpandCollapse.prototype = {


	_expandHandler : null,
	_contClass : null,
	_detailClass : null,
	_expandClass : null,
	_hideFirst : false,
	/**
	 * This function sets all the variable.
	 * @param {String} handlerClass the class name of event trigger
	 * @param {String} contClass the class name of the container
	 * @param {String} detailContentClass the class name of the detail content
	 * @param {String} expandClass the class name to append after expand
	 * @function
	 **/
	init : function(handlerClass, contClass, detailContentClass, expandClass, hideFirst) {
		this._expandHandler = handlerClass;
		this._contClass = contClass;
		this._detailContentClass = detailContentClass;
		this._expandClass = expandClass;	
		this._hideFirst = hideFirst;		
		this.addExpandCollapseEvt(); //add event handler
	},
	
     /**
	 * Attach Expand and Collapse events to handler icon.
	 * @function
	 */
	 addExpandCollapseEvt : function() {
	    
		var ec = this; //Nextel.ExpandCollapse;
		var classCollapseIcon = "collapseIcon"; //Invert class icon image.
		var idHandler = "#handler"; //id for span element.
		var noIdHandler = null; //Id to complement the idHandler var to identify what item detail is collapsing.
				
		$('.' + this._contClass).each(function(inx){
			if (inx !== 0 || ec._hideFirst) { 
				$(this).removeClass(ec._expandClass); 
			}
			var cl = this; //current content container
			var timing = 0;
			var bversion = parseInt(jQuery.browser.version);
			$(this).find('.' + ec._expandHandler).bind('click', [ec, cl], function(){	
				if(jQuery.browser.msie && bversion < 8) {
					timing = 0;
				} else {
					timing = 500;
				}		
				$(cl).find('.' + ec._detailContentClass).animate({height : 'toggle'}, timing, function() {});		
				($(cl).hasClass(ec._expandClass)) ? $(cl).removeClass(ec._expandClass) : $(cl).addClass(ec._expandClass);
					
				if (cl.id.length > 1) {
					noIdHandler = cl.id.charAt(cl.id.length-1);
					if ($(idHandler + noIdHandler).hasClass(classCollapseIcon)) {
						$(idHandler + noIdHandler).removeClass(classCollapseIcon);
					} else {
						$(idHandler + noIdHandler).addClass(classCollapseIcon);
					}
				}				
			});	
		});	
		
	}
	
}



/**
 * Nextel.TandC is a class that abstracts the scroll bars used in the Terms and Conditions text across the site. 
 * @constructor
 */ 
Nextel.TandC = function(element,inner) { this.init(element,inner); }

Nextel.TandC.prototype = {
	/**
	 * Set the scroll event to check if the user has reached bottom.
	 * @param {Object} element  The surrounding div that sets the height
	 * @param {Object} inner  The div containing the text
	 * @function
	 */
	init : function(element,inner) {
		$(element).scroll(function(e) {
			Nextel.TandC.prototype.checkScrollBottom(element,inner);
		})
	},
	/**
	 * Add custom scroll to terms and condition.
	 * @param {String} selector
	 * @function
	 */
	addCustomScroll : function(selector) {
		$(selector).jScrollPane( {
			showArrows:true,
			scrollbarWidth: 14,
			scrollbarMargin:10,
			dragMinHeight: 40
		});
	},
	/**
	 * Check to see if the user has scrolled to the bottom of the Terms and Conditions; if so, enable the checkbox
	 * @param {Object} element  The surrounding div that sets the height
	 * @param {Object} inner  The div containing the text
	 * @function
	 */
	checkScrollBottom : function(element,inner) {
		//console.log("element.height: " + (Math.abs($(element).offset().top) + $(element).outerHeight(true)) + " inner.height: " + ($(inner).offset().top + $(inner).outerHeight()) );
		//console.log(Math.abs($(element).offset().top) + $(element).outerHeight(true) ==  $(inner).offset().top + $(inner).outerHeight());
/*		if (Math.abs($(element).offset().top) + $(element).outerHeight(true) ==  $(inner).offset().top + $(inner).outerHeight()) {
			$(element + "~ .agreeTerms").find("input").removeAttr("disabled");
			$(element + "~ .agreeTerms").find("label").removeClass("disabled");
		}
*/		
		var trackHeight = parseInt($(element + " .jScrollPaneTrack").css('height'));
		var paneDragHeight = parseFloat($(element + " .jScrollPaneDrag").css('height'));
		var paneDragTop = parseInt($(element + " .jScrollPaneDrag").css('top'));
		var currentScrollPos = paneDragHeight + paneDragTop;
		if (trackHeight == Math.round(currentScrollPos)) {
			$(element + "~ .agreeTerms").find("input").removeAttr("disabled");
			$(element + "~ .agreeTerms").find("label").removeClass("disabled");
		}
	}
}

/**
 * Nextel.UsageCharts populates the usage charts on the I Have and Usage pages with data.
 * @constructor
 */
Nextel.UsageCharts = function() { this.init(); }

Nextel.UsageCharts.Constants = {
	UC_WRAP : "usagePieCharts",
	UC_MINUTES : "minutes",
	UC_SMS : "sms",
	UC_MMS : "mms",
	UC_PTT : "ptt",
	UC_USED : "used",
	UC_LIMIT : "limit",
	UC_AMOUNTWRAP : "usageAmt",
	UC_PIESLICE : "pieSlice",
	UC_PIE : "pieChart",
	UC_UNLIMITED : "unlimited",
	UC_ACTIVATED : "activated",
	UC_OVERAGE : "overageAmt",
	UC_WARNING : "warning",
	UC_AJAXCALL : "global/js/usageAjaxReturn.js"
}

Nextel.UsageCharts.prototype = {
	init : function() {
		Nextel.UsageCharts.prototype.ajaxRequest(pageData.uid);
	},
	/**
	 * Call the web service to receive information about the current usage
	 * @function
	 * @param {String} uid - the user id of the customer, used to get usage statistics
	 */
	ajaxRequest : function(uid) {
		$.post(Nextel.UsageCharts.Constants.UC_AJAXCALL, { uid : uid }, function(data) {
			Nextel.UsageCharts.prototype.updateCharts(data);
		}, "json");
	},
	/**
	 * Update the charts on the page using the data from the AJAX call.
	 * @function
	 * @param {Object} data
	 */
	updateCharts : function(data) {
		var _c = Nextel.UsageCharts.Constants;
		
		var minuteUsage = this.parseAJAX(data,_c.UC_MINUTES);
		var smsUsage = this.parseAJAX(data,_c.UC_SMS);
		var mmsUsage = this.parseAJAX(data,_c.UC_MMS);
		var pttUsage = this.parseAJAX(data,_c.UC_PTT);
		
		var minuteClass = this.getPctClass(minuteUsage[0],minuteUsage[1]);
		var smsClass = this.getPctClass(smsUsage[0],smsUsage[1]);
		var mmsClass = this.getPctClass(mmsUsage[0],mmsUsage[1]);
		var pttClass = this.getPctClass(pttUsage[0],pttUsage[1]);
		
		var minuteUpdate = this.updateUsage(minuteUsage[0], minuteUsage[1], _c.UC_MINUTES, minuteClass, LOCALIZED_DATA.UC_MINUTES);
		var smsUpdate = this.updateUsage(smsUsage[0], smsUsage[1], _c.UC_SMS, smsClass, LOCALIZED_DATA.UC_SMS);
		var mmsUpdate = this.updateUsage(mmsUsage[0], mmsUsage[1], _c.UC_MMS, mmsClass, LOCALIZED_DATA.UC_MMS);
		var pttUpdate = this.updateUsage(pttUsage[0], pttUsage[1], _c.UC_PTT, pttClass, LOCALIZED_DATA.UC_PTT);
		
		var minuteOverlays = this.activateOverlays(minuteClass, minuteUsage, _c.UC_MINUTES, LOCALIZED_DATA.UC_MINUTES);
		var smsOverlays = this.activateOverlays(smsClass, smsUsage, _c.UC_SMS, LOCALIZED_DATA.UC_SMS);
		var mmsOverlays = this.activateOverlays(mmsClass, mmsUsage, _c.UC_MMS, LOCALIZED_DATA.UC_MMS);
		var pttOverlays = this.activateOverlays(pttClass, pttUsage, _c.UC_PTT, LOCALIZED_DATA.UC_PTT);
		
	},
	/**
	 * Grab the usage and limit from the data returned by the AJAX call
	 * @function
	 * @param {Object} data
	 * @param {Object} category
	 */
	parseAJAX : function(data,category) {
		var usage = data[0][category].used;
		var limit = data[0][category].limit;
		var pctOver = data[0][category].pctOver;
		var amtOver = data[0][category].amtOver;
		var costOver = data[0][category].costOver;
		return [usage, limit, pctOver, amtOver, costOver];
	},
	/**
	 * Create the appropriate class for the pie chart.
	 * @function
	 * @param {Object} usage
	 * @param {Object} limit
	 */
	getPctClass : function(usage,limit) {
		var _c = Nextel.UsageCharts.Constants;
		if (limit === "Ilimitado") {
			var pcClassName = _c.UC_UNLIMITED;
		} else if (limit === "Activated") {
			var pcClassName = _c.UC_ACTIVATED;
		} else {
			var pct = (usage/limit) * 100;
			if ( pct % 4 > 0 ) {
				pct = ((parseInt(pct / 4) + 1) * 4);
			}
			if (pct > 100) {
				var pcClassName = "pieOver";
			} else {
				var pcClassName = "pie" + pct + "pct";
			}
		}
		return pcClassName;
	},
	/**
	 * Assign the class names that show the appropriate pie chart
	 * @function
	 * @param {Object} name
	 * @param {Object} pcClass
	 */
	assignClassName : function(name,pcClass) {
		var _c = Nextel.UsageCharts.Constants;
		$("#" + name + " ." + _c.UC_PIESLICE).attr("class",_c.UC_PIESLICE);
		$("#" + name + " ." + _c.UC_PIESLICE).addClass(pcClass);
	},
	/**
	 * Display appropriate overlays
	 * @param {String} pcClass - the class defining what pie chart displays
	 * @param {Object} usage - an object containing the parsed AJAX response
	 * @param {String} target - which bucket the overlays are in
	 * @param {String} unit - localized text used in displaying what kind of unit is being displayed by a chart
	 */
	activateOverlays : function(pcClass, usage, target, unit) {
		var _c = Nextel.UsageCharts.Constants;
		
		if (parseInt(usage[0]) === parseInt(usage[1])) {
			$("#" + target +  " .limitOverlay").addClass("active");
		} else if (parseInt(usage[0]) > parseInt(usage[1])) {
			$("#" + target +  " .overageOverlay").addClass("active");
			this.updateOverageTxt(usage[2],usage[3],usage[4],unit, target);
		}
		
		if(pcClass === _c.UC_UNLIMITED) {
			$("#" + target + " ." + _c.UC_PIE).addClass(_c.UC_UNLIMITED);
		} else if(pcClass === _c.UC_ACTIVATED) {
			$("#" + target + " ." + _c.UC_PIE).addClass(_c.UC_ACTIVATED);
		} else {
			Nextel.UsageCharts.prototype.assignClassName(_c.UC_MINUTES,pcClass);
		}
	},
	/**
	 * Updates the Usage Charts text
	 * @param {Object} used - how many units were used
	 * @param {Object} limit - how many units are available
	 * @param {Object} bucket - which bucket the data applies to
	 * @param {Object} pcClass - the class for the pie chart, used to define what data is to be displayed
	 * @param {Object} unit - localized text used in displaying what kind of unit is being displayed by a chart
	 */
	updateUsage : function(used, limit, bucket, pcClass, unit) {
		var _c = Nextel.UsageCharts.Constants;
		$("#" + bucket + " ." + _c.UC_USED).html(used);
		
		if(pcClass === _c.UC_ACTIVATED) {
			var sent = unit + " " + LOCALIZED_DATA.UC_SENT;
			$("#" + bucket + " ." + _c.UC_LIMIT).html(sent);
			$("#" + bucket + " .separator").addClass("displaynone");
			$("#" + bucket + " .payg").removeClass("displaynone");
		} else {
			$("#" + bucket + " ." + _c.UC_LIMIT).html(limit);
			$("#" + bucket + " .separator").removeClass("displaynone");
			$("#" + bucket + " .payg").addClass("displaynone");
		}
		
		$("#" + bucket + " ." + _c.UC_WARNING).html("");
		$("#" + bucket + " ." + _c.UC_WARNING).parent().removeClass("over");
	},
	/**
	 * Update the popups that inform users that they are at or over the limit
	 * @param {Object} pct - Percent over the subscribed usage
	 * @param {Object} amt - Amount over the subscribed usage
	 * @param {Object} cost - Cost of the overage
	 * @param {Object} unit - localized text used in displaying what kind of unit
	 * @param {Object} bucket - which bucket the data applies to
	 */
	updateOverageTxt : function(pct, amt, cost, unit, bucket) { 
		var _c = Nextel.UsageCharts.Constants;
		var warning = LOCALIZED_DATA.UC_OVERPRE + " <span class='percent'>" + pct + "</span> " + LOCALIZED_DATA.UC_OVERPOST;
		var specifics =  amt + " " + unit + "<br />\n" + LOCALIZED_DATA.CURRENCY + cost;
		$("#" + bucket + " ." + _c.UC_OVERAGE).html(specifics);
		$("#" + bucket + " ." + _c.UC_WARNING).html(warning);
		$("#" + bucket + " ." + _c.UC_WARNING).parent().addClass("over");
	},
	
	/**
	 * Update the displayed numbers
	 * @function
	 * @param {Object} name
	 * @param {Object} usage
	 */
	setUsageNumbers : function(name,usage) {
		var _c = Nextel.UsageCharts.Constants;
		$("#" + name + " ." + _c.UC_AMOUNTWRAP + " ." + _c.UC_USED).text(usage[0]);
		$("#" + name + " ." + _c.UC_AMOUNTWRAP + " ." + _c.UC_LIMIT).text(usage[1]);
	}
}

/**
 * ServiceManager for handling add service and remove a service functionalities.
 * @constructor
 */
Nextel.ServiceManager = function(RFID, RF_OPEN, RFDENY) 
{ this.init(RFID, RF_OPEN, RFDENY); }
/**
 * Constants for Nextel.ServiceManager
 * @constant
 */
Nextel.ServiceManager.Constants = {
	RF_CLOSE_BTN_CLASS: "rsCloseBtn",
	RF_BG_CLASS: "rsOverlay",
	STATUS_AJAX: "global/js/checkStatus.js"
};
Nextel.ServiceManager.prototype = {
	_c : Nextel.ServiceManager.Constants,
	_RFID : null,
	_RFOBJ : null,
	_RFOPEN : null,
	_HIDEDATA : false,
	/**
	 *  Binds the interactions for the add plan overlay.
	 * @function
	 **/
	init : function(RFID, RF_OPEN, RFDENY) {
		this._RFID = RFID;
		this._RF_OPEN = RF_OPEN;
		if (RFDENY) {
			this._RFDENY = RFDENY;
			
		} else {
			this._RFDENY = null;
		}
		
		
		var _tc = this;
		
		$("."+RF_OPEN).bind("click", _tc, function(e) {
		
			_tc._RFOBJ = this;			
			
			if (_tc._RF_OPEN == "termsAndConditions") {
			
				_tc._HIDEDATA = true;
				
				$("#" + _tc._RFID).addClass("displayForViewOnly");
			}
			else {
			
				
				$("#" + _tc._RFID).removeClass("displayForViewOnly");
			}
			
			if (_tc._RFDENY) {
				
				e.preventDefault();
				
				if (!_tc._HIDEDATA && !$(this).hasClass("checked")) {
				
					$("#"+_tc._RFID).data(_tc);
					_tc.checkStatus(RFID);
				}
				else {
					
					_tc.openRFOverlay(_tc._RFOBJ, _tc._RFID);
				}
			} else {
				
				_tc.openRFOverlay(_tc._RFOBJ, _tc._RFID);
			}
		});
		
		$("#" + this._RFID + " .overlayBtn").bind("click", _tc, function() {
			_tc.closeRFOverlay(this, _tc._RFID, _tc._RFOBJ);
		});		
		$("."+this._c.RF_CLOSE_BTN_CLASS).bind("click", _tc, function() {
			_tc.closeRFOverlay(this, _tc._RFID, _tc._RFOBJ);
		});
		$("."+this._c.RF_BG_CLASS).bind("click", _tc, function() {
			_tc.closeRFOverlay(this, _tc._RFID, _tc._RFOBJ);
		});
				
	},
	/**
	 * AJAX call to check whether the customer has paid their bill and is therefore eligible to add the selected service.
	 * @function
	 */
	checkStatus : function(RFID) {
	
	//added for add aservice overlay
		var env = $("#"+RFID).data();	
		Nextel.ServiceManager.prototype.openRFOverlay(env._RFOBJ, env._RFID);
		
		/*var sessionid = Nextel.Cart.prototype.getSessionID();
		$.ajax({
			data : { sessionid : sessionid },
			dataType : "text",
			type : "post",
			url : Nextel.ServiceManager.Constants.STATUS_AJAX  + "?ajax=true&rand=" + Math.random(),
			success : function(data, textStatus, XMLHttpRequest) {
				var env = $("#addServiceWidget").data();
				if (data === "true") {
					Nextel.ServiceManager.prototype.openRFOverlay(env._RFOBJ, env._RFID);
				} else {
					Nextel.ServiceManager.prototype.openRFOverlay(env._RFOBJ, env._RFDENY);
				}
			}
		});*/
	},
	/**
	 * Closes the AddService overlay.
	 * @function
	 **/
	closeRFOverlay : function(obj, RFID, RFOBJ) {
	
		
		try 
		{
			if (RFOBJ != null) {
				$(RFOBJ).removeClass('checked');
				$(RFOBJ).prev().attr('checked', false);
				var serviceFor = $(RFOBJ).attr('for');
				var lastChar = serviceFor.substr(serviceFor.length-1);
				serviceFor = serviceFor.substr(0, serviceFor.length-1);;
				serviceFor += (lastChar == 'd') ? 'a' : 'd';
				$('#' + serviceFor).attr('checked', true);
				$('#' + serviceFor).next().addClass('checked');
			}
		}catch(err) { ; }
		
		Nextel.OverlayView.prototype.closeOverlayView("#"+RFID);
		return false;
	},
	/**
	 * Shows the AddService overlay.
	 * @function
	 **/
	openRFOverlay : function(obj, RFID) {
		if ($(obj).hasClass("checked")) {
			return false;
		} else {
			if (RFID == "associateDeviceWidget") {
				$(".item").removeClass("displaynone");
				Nextel.OverlayView.prototype.openOverlayView("#"+RFID);
				Nextel.Module.Manager.prototype.setCustomSelectValue('brandFilter','all');
				Nextel.TandC.prototype.addCustomScroll("#"+RFID+" .deviceChooser");
				$("#brandFilter-menu a").bind("click", function() {
					Nextel.ServiceManager.prototype.filterPhones($("#brandFilter").val());
				});
			}
			else {
				Nextel.ServiceManager.prototype.setVariables($(obj).attr("rel"), RFID);
				Nextel.OverlayView.prototype.openOverlayView("#"+RFID);
				Nextel.TandC.prototype.addCustomScroll("#"+RFID+" .modalContentPane .changeServiceCon");
				Nextel.TandC.prototype.init("#"+RFID+" .modalContentPane", "#"+RFID+" .modalContentPane .changeServiceCon");
				//$("input[type=checkbox]").customInput();
			}
			return false;
		}
	},
	/**
	 * Grabs information from the page and populates the Add a Service overlay with that information.
	 * @function
	 **/
	setVariables : function(num, RFID) {
	  
		var row = ".service" + num + "row";
		var price = $(row + " .productPrice").text();
		var serviceName = $(row + " h4").text();
		var sku = $(row + " .sku").text();
		var terms = $(row + " h3").text();
		var fleetNo = $(row + " .fleetId").text(); 
		var planNo = $(row + " .PlanId").text(); 
		var contractNo = $(row + " .ContractId").text(); 
		var lineNo = $(row + " .LineNumber").text();
		var sourceIdNew1 = $(row + " .sourceIdNew").text();
		var sourcePrice = $(row + " .servicePrice").text();
		var radioId = $(row + " .radioId").text();
		
		var planNameNew = $(row + " .planName").text();
		$("#" + RFID + " .rsBoxTop em").text(serviceName);
		$("#" + RFID + " .productPrice").html(price.substring(0, price.length-2) + "<sup>" + price.substring(price.length-2) + "</sup>");
		$("#" + RFID + " input#sku").val(sku);
		$("#" + RFID + " .changeServiceCon").text(terms);
		if(RFID == 'delServiceWidget')
		{
			document.getElementById('fleetIDDel').value = fleetNo;
			document.getElementById('PlanIdDel').value = planNo;
			document.getElementById('ContractIdDel').value = contractNo;
			document.getElementById('LineNumberIDDel').value = lineNo;
			document.getElementById('serviceID1').value = serviceName;
			document.getElementById('sourceIdNewDel').value = sourceIdNew1;
			document.getElementById('servicePriceDel').value = sourcePrice; 
			document.getElementById('planNameDel').value = planNameNew; 
			document.getElementById('radioIdDel').value = radioId; 
			//alert('fleetNo : '+document.getElementById('fleetIDDel').value+' planNo :'+document.getElementById('PlanIdDel').value+ 
			//' contractNo:'+document.getElementById('ContractIdDel').value+' lineNo :'+document.getElementById('LineNumberIDDel').value);
		}
		if(RFID == 'addServiceWidget')
		{
			document.getElementById('fleetIDNew').value = fleetNo;
			document.getElementById('PlanIdNew').value = planNo;
			document.getElementById('ContractIdNew').value = contractNo;
			document.getElementById('LineNumberIDNew').value = lineNo;
			document.getElementById('serviceID').value = serviceName; 
			document.getElementById('sourceIdNewAdd').value = sourceIdNew1; 
			document.getElementById('servicePrice1').value = sourcePrice; 
			document.getElementById('planName1').value = planNameNew;
			document.getElementById('radioIdAdd').value = radioId; 
			//alert('fleetNo : '+document.getElementById('fleetIDNew').value+' planNo :'+document.getElementById('PlanIdNew').value+ 
			//' contractNo:'+document.getElementById('ContractIdNew').value+' lineNo :'+document.getElementById('LineNumberIDNew').value);
		}
	},


	/**
	 * Filter the list of phones by brand
	 * @function
	 * @param {String} brand
	 **/
	filterPhones : function(brand) {
		if (brand === "all") {
			$(".item").removeClass("displaynone");
		} else {
			$(".item:not(." + brand + ")").addClass("displaynone");
			$("." + brand).removeClass("displaynone");
		}
	}
		
};

/** This function will load the additional graphic after page has completed loading. **/
$(window).load(function() {
	$('img.postLoad').each(function(){ this.src = this.alt; this.alt = ''; });
});


$(function() {

	
	var _Assistant = new Nextel.Assistant(); //new Assistant
	
	var _Module = new Nextel.Module.Manager(); //new Module
	var _Login = new Nextel.Login.Manager(); //new Loging
	
	var _OverlayView = new Nextel.OverlayView(); //Grayed out overlay view
	var _RegionSelector = new Nextel.RegionSelector(); //new Region Selector
	var _Cart = new Nextel.Cart(); //new Cart
	var _overlay = new Nextel.Overlay("smsWidget"); //new Overlay manager
	var _coverageOverlay = new Nextel.CoverageCheck(); //coverage check
	var _nextelNumberOverlay = new Nextel.ValidateNextelNumber(); // Validate Nextel Number
	var isSMSEligible= document.getElementById("isEligible");
	
	if(isSMSEligible !=null ) { 
		isSMSEligible= document.getElementById("isEligible").value;
		callSMSCountCheck(isSMSEligible);
	}
	
	var _ap = new Nextel.AddPlan();  //new AddPlan

	var _pd = new Nextel.PermissionsDialog(); //new Permissions Dialog overlay
	
	if ($('body').hasClass('showRegionSelector')) {
		_RegionSelector.showChangeView();
	}
	
	if ($('body').hasClass('usageChart')) {
		var _uc = new Nextel.UsageCharts();
	}

	//enables the terms&conditions Scrolling panel
	Nextel.TandC.prototype.addCustomScroll(".contentPane .scrolling");
	var _tc = new Nextel.TandC(".contentPane",".contentPane .scrolling");
	
	formatCurrency();
	
});


function callSMSCountCheck(isEligible){		
	
	if (isEligible == "true") {	
	
		//var _overlay = new Nextel.Overlay("smsWidget");
		//var _overlay = new Nextel.Overlay("smsWidget"); //new Overlay manager
	}
	else {	
	
		$(".smsWidget").bind('click', function(){			
				//var _overlay = new Nextel.Overlay("smsWidget");
				$(".overlayInitial").addClass('displaynone');					
				$(".overlayMessage").removeClass('displaynone');	
				$(".overlayMessageDisplay").html(document.getElementById('nomoreMessages').value);
				
		});	
	}
}




/**
 * Wrapping the decimal place in sup tag for styling purpose.
 * @function
 */
function formatCurrency() {
	//this each loop with wrap the last three characters of price for formating purpose
	$('.priceFormat').each(function(){
	
		if (!$(this).hasClass('formatProcessed')) {
			    var txt = $.trim($(this).html());
			  
				var substr= txt.substring(0, txt.length-3);
				if(substr.indexOf("R$") == 0 )
				{
					var txtvalue = txt.substring(0, txt.length-3) + "<sup>" + txt.substring(txt.length-2) + "</sup>";
					  $(this).html(txtvalue);
				}	
						
			$(this).addClass('formatProcessed');
		} 
	});
}


function setLinkCatalog(link1){
				document.getElementById('myLinkCatalog').href = link1;
			}
			
function setSelected() {
				document.getElementById('myLinkCatalog').className = " iWant_btn active";
				$('.productDetailPage').addClass = "iWant_btn active";			
			}

/**
 * Slide up and Slide down functions using rel on link to tell the id of the affected oject
 * @function
 */
$(document).ready(function() {
	$(".slideDown").bind('click', function() {
	  var target = "#"+$(this).attr("rel");
	  var showLink = "#"+$(this).attr("rel")+"Show";
	  var hideLink = "#"+$(this).attr("rel")+"Hide";
	  $(showLink).hide();
	  $(target).slideDown("slow");
	});
	$(".slideUp").bind('click', function() {
	  var target = "#"+$(this).attr("rel");
	  var showLink = "#"+$(this).attr("rel")+"Show";
	  var hideLink = "#"+$(this).attr("rel")+"Hide";
	  $(showLink).show();
	  $(target).slideUp("slow");
	});
	$("#coveragePostalCodeInput,#billingNumero,#shippingNumero,#billingPostalCode,#shippingPostalCode,#searchNumber,#cepField").keypress(function(evt) {
  		var charCode = (evt.which) ? evt.which : event.keyCode
		if (charCode > 31 && (charCode < 48 || charCode > 57))
     	{	
      		return false;
		}
 	});
 	
	
		/**
	* Binds focus event to search text and cleans its value.
	*/
	$('#searchTxt').bind('focus', function(){
		this.value = "";
	});
	
	/**
	* Binds focusout event to search text and asigns 'Buscar' value.
	*/
	$('#searchTxt').bind('focusout', function(){
	var searchText=document.getElementById('searchTxt');
	if(searchText.value=="" || searchText.value==null)
	{
	this.value = "Buscar";
	}
	else
		this.value = searchText.value;
	});
	
	//rounded corners for global module
	
	
	$('.boxWhiteBody').corner("3px");
	$('.siteMap .boxCanvas').corner("3px");
	$('.boxBody').corner("3px");
	$('.makeCorners').corner("3px");
	$('.makeTout').corner("3px");
	$('.homeTout').corner("3px");
	$('#doubleTout').corner("3px");
	$('.boxHead').corner("3px");
	$('#safetyBox').corner("3px");		
	
	$('.rsBoxBottom').corner("3px");
	$('.loginBar').corner("3px");
    $("#listViewCont").corner("3px bottom");
	$("#listViewContMargin").corner("3px");
	$('.rsBoxTop,.rsBoxBottom').corner("3px");
	$('#aboutNextel').corner("3px");
	$('.fullWidthModule').corner("3px");
	$('.corners').corner("3px");
	$('.boxGreyBody').corner("3px");
	$('.cadastreseModule').corner("3px");
	$('.mustClose').click(function() {
		$('#nationalCoverage').hide();
	});
	$('.contaEmailModule').corner("3px");
	$('.cadastreseModuleOuter').corner("3px");
	$('.cadastreseModuleOuter2').corner("3px");
	$("#tabs li:not(.selectedTab)").corner("top 3px");
	$("#tabs2 li:not(.selectedProfileTab)").corner("top 3px");
	$('#more ul li').uncorner();
	$('.boxHead').corner("3px");
	$('.headerMarginOuter').corner("3px");
	$('.mailMarginOuter').corner("3px");
	$('.billingOuterMargin').corner("3px");
	$('.boxWhiteBody').corner("3px");
	$('.about .boxBodyFrame').corner("3px");
	$('.accountSelector').corner("3px");
	$('.accountSelectorOuter').corner("3px");
	
	$('.contentMarginInner').corner("3px bottom");
	$('.contentMarginOuter').corner("3px bottom");
	$('.headerMarginOuter2').corner("3px top");
	$('.formMessage').corner("3px");
	
	$('.boxBody').corner("3px");
	
	$('.smallPromo').corner("3px");
	$('#safetyBox').corner("3px");
	$('#faturaWebBox').corner("3px");
	$('.makeCorners').corner("3px");
	$('.tabs.subTabs.clearfix a').corner("top 3px");
	$('#iHave').corner("3px");
	$('.customerBox').corner("3px");
	$('#columnAMarginPrivacy2').corner("3px");
	$('.columnAPrivacy2').corner("3px");
	$('#profileNav ul#tabs2 li').corner("top 3px");
	$('.cOverlayBoxT').corner("3px");
	$('.noBg .wrapper').corner("3px");
	$('.noBg .twoColumn').corner("3px");
	$('.siteMap .boxCanvas').corner("3px");
	$('.friendOutter').corner("3px");
	$('.regBody .columnB .completePromo ').corner("3px");
	$('.regBody .columnB .completePromoInner ').corner("3px");
	$('#forgotPasswordOverlay .rsBoxTop').corner("3px");
	$('#forgotPasswordOverlay .rsBoxBottom').corner("3px");
	$('.friendMarginOuter').corner("3px");	
	$('#automaticEZform .ezBox').corner("3px");
	$('.categoryNav li a').corner("top 3px");
	$('.headerMarginInner3').corner("3px");
	$('.warningCont').corner("3px");
	$('.errorFormBottom').corner("3px");
	$('.makeTout').corner("3px");
	$('#smsWidget .boxCanvas').uncorner();
	$('.twoColumn.profileSelected .boxModule').uncorner("tr").corner('tl 3px').corner('bottom 3px');
	$('.twoColumn.profileSelected .boxCanvas').uncorner("tr").corner('tl 3px').corner('bottom 3px');
 	
		
 	$('.corners').hover(
		function () {
			//alert($.browser.version);
			//input
			var brwsr = navigator.appName;
			if(brwsr != "Microsoft Internet Explorer")
			{
			var width = ($('.inputField',this).width())-4;
			var height = ($('.inputField',this).height())-4;
			$('.inputField',this).css({ 'margin': '3px', 'width':width, 'height':height});
			}
			//textarea
			var width2 = ($('.defaultField',this).width())-4;
			var height2 = ($('.defaultField',this).height())-4;
			$('.defaultField',this).css({ 'margin': '3px', 'width':width2, 'height':height2});
		  	
		}, 
		function () {
			//input
			var brwsr = navigator.appName;
			if(brwsr != "Microsoft Internet Explorer")
			{
			var width = ($('.inputField',this).width())+4;
			var height = ($('.inputField',this).height())+4;
			$('.inputField',this).css({ 'margin':'1px', 'width':width, 'height':height});
			}
			//textarea
			var width2 = ($('.defaultField',this).width())+4;
			var height2 = ($('.defaultField',this).height())+4;
			$('.defaultField',this).css({ 'margin':'1px', 'width':width2, 'height':height2});
			
		}
	);
	
	$('.my_tip').bind('click', function(e) {
		e.preventDefault();
		var position = $(this).position();
		var top = position.top;
		var left = position.left;
		$('.tooltip').css("top",top);
		$('.tooltip').css("left",left);
		$('.tooltip').toggle();
	});
	
	$('.toggle_tip').bind('click', function(e) {
		$('.tooltip').toggle();
	});
	
	//for inactive
	$('.inactive_my_tip').bind('click', function(e) {
		e.preventDefault();
		var position = $(this).position();
		var top = position.top;
		var left = position.left;
		$('.inactive_tooltip').css("top",top);
		$('.inactive_tooltip').css("left",left);
		$('.inactive_tooltip').toggle();
	});
	
	$('.inactive_toggle_tip').bind('click', function(e) {
		$('.inactive_tooltip').toggle();
	});
	
	//for suspended
	$('.suspended_my_tip').bind('click', function(e) {
	
		e.preventDefault();
		var position = $(this).offset();
		var top = position.top;
		var left = position.left;
		$('.suspended_tooltip').css("top",top);
		$('.suspended_tooltip').css("left",left);
		$('.suspended_tooltip').toggle();
	});
	
	$('.suspended_toggle_tip').bind('click', function(e) {
		$('.suspended_tooltip').toggle();
	});
 	
 	
 	$('.sorry_my_tip').bind('click', function(e) {
		e.preventDefault();
		var position = $(this).offset();
		var top = position.top;
		var left = position.left;
		$('.sorry_tooltip').css("top",top);
		$('.sorry_tooltip').css("left",left);
		$('.sorry_tooltip').toggle();
	});
	
	$('.sorry_toggle_tip').bind('click', function(e) {
		$('.sorry_tooltip').toggle();
	});
	
	//for fraud
	$('.fraud_my_tip').bind('click', function(e) {
		e.preventDefault();
		var position = $(this).position();
		var top = position.top;
		var left = position.left;
		$('.fraud_tooltip').css("top",top);
		$('.fraud_tooltip').css("left",left);
		$('.fraud_tooltip').toggle();
	});
	
	$('.fraud_toggle_tip').bind('click', function(e) {
		$('.fraud_tooltip').toggle();
	});
	
	//for inStore
	$('.inStore_my_tip').bind('click', function(e) {
		e.preventDefault();
		var position = $(this).offset();
		var top = position.top;
		var left = position.left;
		$('.inStore_tooltip').css("top",top);
		$('.inStore_tooltip').css("left",left);
		$('.inStore_tooltip').toggle();
	});
	
	$('.inStore_toggle_tip').bind('click', function(e) {
		$('.inStore_tooltip').toggle();
	});
	
	
	//for Payment not eligible
	$('.PnE_my_tip').bind('click', function(e) {
		e.preventDefault();
		var position = $(this).position();
		var top = position.top;
		var left = position.left;
		$('.PnE_tooltip').css("top",top);
		$('.PnE_tooltip').css("left",left);
		$('.PnE_tooltip').toggle();
	});
	
	$('.PnE_toggle_tip').bind('click', function(e) {
		$('.PnE_tooltip').toggle();
	});
	
	//for overdue
	$('.overdue_my_tip').bind('click', function(e) {
		e.preventDefault();
		var position = $(this).offset();
		var top = position.top;
		var left = position.left;
		$('.overdue_tooltip').css("top",top);
		$('.overdue_tooltip').css("left",left);
		$('.overdue_tooltip').toggle();
	});
	
	$('.overdue_toggle_tip').bind('click', function(e) {
		$('.overdue_tooltip').toggle();
	});
	
	//government
	$('.government_my_tip').bind('click', function(e) {
		e.preventDefault();
		var position = $(this).position();
		var top = position.top;
		var left = position.left;
		$('.government_tooltip').css("top",top);
		$('.government_tooltip').css("left",left);
		$('.government_tooltip').toggle();
	});
	
	$('.government_toggle_tip').bind('click', function(e) {
		$('.government_tooltip').toggle();
	});
 	$(".carouselModule").css("visibility","visible");
});

