
if ($j.cookie('usePopup')=='true'){
	$j.Avaya.Page.Sizing.dontResize = true;
}



$j(function() {
/* :MERGE: Removed
	$j('span.checkbox').live('click', function(e){
		var $target = $j(e.target);
		
		if ($target.is('#partnerNameCheck')){
			if (!$target.is('.checked')) $j('input[name=partner-name]').val('');
		}
		
		if ($target.is('#radiusCheckbox')){
			if (!$target.is('.checked')){
				$j.each($j.Avaya.global.CustomSelects, function(k, cs){
					if ($j(cs.container.context).is('select[name=distance]')) {
						cs.jumpToValue('select');
					}
				})
			}
		}
	});
*/
	
	$j('#mapToggler').live('click', function(e){
		e.preventDefault();
		var $target = $j(e.target);
/* :MERGE: Replaced Begin
		var tracking = ($target.is('.hideMap')) ? 'map:hide' : 'map:show';
		
		if (tracking == 'map:hide'){
			$target.removeClass('hideMap').addClass('showMap');
		}
		else {
			$target.removeClass('showMap').addClass('hideMap');
		}
*/
        var tracking = ($target.text().toLowerCase().indexOf('hide') > -1) ? 'map:hide' : 'map:show';
// :MERGE: Replaced End		
		$j.Avaya.global.Tracking.clickEvent(tracking);
	});

	if ($j.cookie('usePopup')=='true'){
		$j("body").attr("id", "standalone");		
		$j('#masthead, #footer').remove();		
		
		//$j.cookie('usePopup','false',{expires:-1});
	} else {
		$j.Avaya.Page.Sizing.dontResize = false;
	}

	$j.Avaya.SifrConfig.masterReplace($j.Avaya.SifrConfig.gothamLight,{
	   selector: 'h1',
	   css: {
			'.sIFR-root': { 
				'color': '#cc0000', 
				'font-size': 18
			}
	   },
	   selectable: false
	});
	
	$j.Avaya.SifrConfig.masterReplace($j.Avaya.SifrConfig.gothamLight,{
	   selector: '#tabs li',
	   css: {
			'.sIFR-root': { 
				'color': '#404040', 
				'font-size': 18,
				'text-align': 'center'
			},
			'a': {
				'color': '#404040',
				'text-decoration': 'none'
			},

			'a:hover': { 
				'color': '#CC0000'
			}
	   },
	   selectable: false
	});	
	
// :MERGE: Inserted Begin
	$j.Avaya.SifrConfig.masterReplace($j.Avaya.SifrConfig.gothamLight,{
	   selector: '#partnerInfoContainer ul.headers li',
	   css: {
			'.sIFR-root': { 
				'color': '#404040', 
				'font-size': 18,
				'text-align': 'left'
			}
	   },
	   selectable: false
	});	
	var currentCty = "";
// :MERGE: Inserted End
	var ul = $j('#tabs');
	var list = ul.find('li');
	var partnerName = $j('#partnerName').find(':text');	
	var productSearch = $j('#productSearch').find('select');
	var form = $j('#locatorForm');
	var formView = $j('#form-view');
	var resultNumbers = $j('#resultNumbers');
	var mapContainer = $j('#mapContainer');
	var partnerInfoContainer = $j('#partnerInfoContainer');
	var stateSelect = $j('#locaterStateSelect');
	var mapSection = $j('#mapSection');
	var ajaxLoader = $j('#mapAjaxLoader');
	var qs = new $j.Avaya.QueryString();
		
	var validation = new $j.Avaya.Validation({form:form});
	var partnerNameCheckbox = new $j.Avaya.Checkbox({
		container:$j('#partnerNameCheck'),
		changeCallback:function(){
			$j('#partnerName').toggleClass('active');
			$j('input[name=partner-name]').toggleClass('required');
			if (!partnerNameCheckbox.isChecked()) $j('#partnerName').removeClass('error-state');
			validation.updateRequired();
		}
	});
	
	if ($j('#partnerNameCheck input:checkbox').is(':checked')){
		$j('#partnerName').addClass('active')
		$j('input[name=partner-name]').addClass('required');
		validation.updateRequired();
	}
	
	var radiusCheckbox = new $j.Avaya.Checkbox({
		container:$j('#radiusCheckbox'),
		changeCallback:function(){
			$j('#radiusDropdown').toggleClass('active');
		}
	});
	$j('#emailAFriend span.checkbox').each(function(){
		new $j.Avaya.Checkbox({
			container:$j(this)
		});
	});
	
	var makeRequired = function(section){
		section.removeClass('not-required');
		section.find('select,input:text').addClass('required');
	};
	
	var makeOptional = function(section){
		section.addClass('not-required').removeClass('error-state');
		section.find('select,input:text').removeClass('required');
	};
	
	var hideProductTab = function(){
		list.eq(2).css('display','none');
		if (list.eq(2).hasClass('active')){
			alert($j.Avaya.Error.PartnerLocator.noProductSearch);
			$j.Avaya.global.LocatorTabs.change('quick-search');
		}
	};
	
	var showProductTab = function(){
		list.eq(2).css('display','block');
	};
	
	var emailBlocker = new $j.Avaya.Blocker({element : $j('#plContentBlocker'), parent : $j('#partnerLocator'), adjustment : -10});
	
	if (radiusCheckbox.isChecked()){
		$j('#radiusDropdown').addClass('active');
	}
	
	$j('#content select').each(function(){
		var $this = $j(this),
			truncateLen = 21;
		if ($this.attr('id') == 'locaterCountrySelect'){
			var cs = new $j.Avaya.CustomSelect($this,{truncateDisplay:truncateLen, submitFunction:function(){
/* :MERGE: Replaced Begin
                $j.ajax({
	                type : 'GET',
	                url: '/_assets/json/locatorStates'+Math.floor(Math.random()*4)+'.js',
	                dataType : 'json',
	                data :  'country='+$this.val(),
	                success : function(response){
*/
			    var partnerLocator = new PartnerLocator();
			    partnerLocator.GetPartnerStateList($this.val(),function(params){
				        var country = $this.val();
				        if (country.indexOf("http") >= 0) 
				        {
				            document.location.href = country;
				            return;
				        }
// :MERGE: Replaced End
				        
						var $lbl_metric = $j("#unit-kilometers");
						var $lbl_miles = $j("#unit-miles");

/* :MERGE: Replaced Begin						
						if(response.metric) {
*/
						if(country.indexOf("United States") < 0 && country.indexOf("United Kingdom") < 0) {
// :MERGE: Replaced End
						    $lbl_metric.show();
							$lbl_miles.hide();
						} else {
							$lbl_metric.hide();
							$lbl_miles.show();	
						}
						
/* :MERGE: Replaced Begin
						var states = response.states;
						var opts = '';
						for (var i=0;i<states.length;i++){
							opts += '<option value="'+states[i].value+'">'+states[i].text+'</option>';
						}
*/
						var states = params.result;
						var opts = '';
						for (var i=0;i<states.length;i++){
						    var statevalue = states[i].state;
						    if (i == 0) statevalue = "";
							opts += '<option value="'+statevalue+'">'+states[i].state+'</option>';
						}
// :MERGE: Replaced End						

// :MERGE: Inserted Begin
						if (currentCty != 'Germany') {
// :MERGE: Inserted End
						    stateSelect.html(opts);
						    var id = stateSelect.parents( '#locatorForm' ).find( 'select' ).index( stateSelect );
/* :MERGE: Removed
						    if( typeof this.list != 'undefined' ) {
*/
						        var customState = $j.Avaya.global.CustomSelects[id];
						        customState.updateList();
        						
						        if (states.length <= 1){
							        customState.container.parents('div.form-section').eq(0).addClass('disabled');
							        customState.displaySpan.html("Select");
							        customState.locked = true;
						        } else {
							        customState.container.parents('div.form-section').eq(0).removeClass('disabled');
							        customState.jumpToIndex(0);
							        customState.matchToIndex();
							        customState.resetScrollPane();
						        }
/* :MERGE: Removed
						    } else {
							    if (states.length <= 1){
								    stateSelect.attr( 'disabled', 'disabled' );
							    } else {
								    stateSelect.removeAttr( 'disabled' );
							    }	
						    }
*/
						}
/* :MERGE: Removed
                        if (response.products == 0){
	                        hideProductTab();
                        }
                        else {
                        	showProductTab();
                        }
*/
						validation.updateRequired();
					
				});
				
			}});
		} 
		else if ($this.attr('id') == 'sortResultsBy'){
			$j.Avaya.global.sortByDD = new $j.Avaya.CustomSelect($this,{truncateDisplay:truncateLen,submitFunction:function(){
				var tracking = 'sort:';
				
				switch($this.val()){
					case 'partnerlevel': tracking += 'partner'; break;
					case 'distance': tracking += 'distance'; break;
					case 'alphabetical': tracking += 'alpha'; break;
				}
				
				$j.Avaya.global.sortOrder = $this.val();
				
				$j.Avaya.global.Tracking.clickEvent(tracking);
				form.submit();
			}});
		}
		else {
			new $j.Avaya.CustomSelect($this, {truncateDisplay:truncateLen});
		}
		
	});
	
	$j('#locatorSubmit').hover(function(){
		this.className = this.className + ' hovered';
	},function(){
		this.className = this.className.replace(/\s*hovered/,'');
	});
	
	//Email overlay.
	$j('a.email-trigger').live('click',function(e){
		e.preventDefault();
		
		$j.Avaya.global.Tracking.clickEvent("PL_Email-Form_Open");

		var $window = $j(window),
			$overlay = $j('#emailAFriend');
		
		emailBlocker.show();
		
		$overlay.removeClass('thank-you');
		$j('#partnerId').val(e.target.id.split('_')[1]);
		
		$overlay.find('span.company-name-holder').each(function(){
			var companyName = decodeURIComponent(e.target.href.split('#')[1]);
			var $this = $j(this);
			
			$j('.nothx span.company-name-holder').html(companyName);
			var $h3 = $j('<h3>Send email to <span class="company-name-holder">' + companyName + '</span></h3>');
			var $overlayHeader = $this.parents('#overlayHeader');
			$overlayHeader.find('h3').remove().end().append($h3);
		});
		
		$overlay.css({display:'block',top: ($window.height()/2) + $window.scrollTop() - ($overlay.height()/2) - 72, right: 22}); //72 is the height of the masthead
		
		
		
		//sIFR IT! after display:block
		$j.Avaya.SifrConfig.masterReplace($j.Avaya.SifrConfig.gothamLight,{
		   selector: '#overlayHeader h3',
		   css: {
				'.sIFR-root': { 
					'color': '#404040', 
					'font-size': 18
				}
		   },
		   selectable: false
		});
	});

	$j('a.overlay-close, a.close-overlay').live('click',function(e){
		var trackingString = (!$j('#emailAFriend div.overlay-thankyou').is(':visible')) ? 'PL_Email-Form_Close' : 'PL_Email-TY_Close';
		$j.Avaya.global.Tracking.clickEvent(trackingString);
	
		$j('#emailAFriend').css('display','none');
		emailBlocker.hide();
	});
	
	var emailForm = $j('#emailAFriend form');
	var emailFormValidation = new $j.Avaya.Validation({form:emailForm});
	
	emailForm.submit(function(e){
		e.preventDefault();
		
		var rs = emailFormValidation.getRequiredString();
		
		if (!rs){
			$j.Avaya.global.Tracking.clickEvent("PL_Email-Form_Submit");
			var params = $j.param(form.find('input:hidden,input:text,select'));
/* :MERGE: Replaced Begin
            $j.ajax({
	            url:'/_assets/json/addressExample.js',
	            type : 'GET',
	            dataType : 'json',
	            data : params,
	            success : function(response){
*/
			name = $j('#name').val();
			email = $j('#email').val();
			company = $j('#company').val();
			phone = $j('#phone').val();
			msg = $j('#msg').val();
			var copytoself = "";
			var checkboxes = $j("input:checkbox");
			checkboxes.each( function() {
				if(this.checked){
				    copytoself = "yes";
				}
			});
			
			jsonParam = [
			                {
			                'partnerid':$j('#partnerId').val(),
			                'name':$j('#name').val(),
			                'email':$j('#email').val(),
			                'company':$j('#company').val(),
			                'phone':$j('#phone').val(),
			                'msg':$j('#msg').val(),
			                'copytoself':copytoself
			                }
			            ];
			var partnerLocator = new PartnerLocator();
			partnerLocator.SendEmail(JSON.stringify(jsonParam),function(params){
// :MERGE: Replaced End
				$j('#emailAFriend').addClass('thank-you');
				
				$j.Avaya.SifrConfig.masterReplace($j.Avaya.SifrConfig.gothamLight,{
				   selector: '#emailAFriend div.overlay-thankyou p.nothx',
				   css: {
						'.sIFR-root': { 
							'color': '#404040', 
							'font-size': 18
						}
				   },
				   selectable: false
				});
				
				$j.Avaya.SifrConfig.masterReplace($j.Avaya.SifrConfig.gothamLight,{
				   selector: '#emailAFriend div.overlay-thankyou p.thx',
				   css: {
						'.sIFR-root': { 
							'color': '#cc0000', 
							'font-size': 18
						}
				   },
				   selectable: false
				});

                                    $j("#emailAFriend input:text, #emailAFriend textarea").each(function(){
					this.value = "";
				});
/* :MERGE: Removed
            	}
*/
			});
			
		} 
		
	});
	
	//Partner overlay.
	$j('a.partner-trigger').live('click',function(e){
		e.preventDefault();
		$j.Avaya.global.Tracking.clickEvent("Partner_Overlay_Open");
		
		var $window = $j(window),
			$overlay = $j('#partnerOverlay'),
			topVal = $window.height()/2 + $window.scrollTop() - $overlay.height()/2 - 72;
		
		if(topVal<50) topVal=50;
		
		emailBlocker.show();
		
		$overlay.css({display:'block',top: topVal, right: 22}); 
		
		$j('#partnerOverlay .overlay-body div.scroller').jScrollPane();
		
		//sIFR IT! after display:block
		$j.Avaya.SifrConfig.masterReplace($j.Avaya.SifrConfig.gothamLight,{
		   selector: '#partnerOverlay #overlayHeader h3',
		   css: {
				'.sIFR-root': { 
					'color': '#404040', 
					'font-size': 18
				}
		   },
		   selectable: false
		});
	});

	$j('a.partner-overlay-close, a.close-partner-overlay').live('click',function(e){
		$j.Avaya.global.Tracking.clickEvent("Partner_Overlay_Close");
		$j('#partnerOverlay').css('display','none');
		emailBlocker.hide();
	});
	
	window.GMAP = new $j.Avaya.GoogleMaps({mapContainer:mapContainer, mapToggler:$j('#mapToggler')});
	var zipWrapper = $j('#locaterZip');
	var cityWrapper = $j('#locaterCity');
	
	$j.Avaya.global.LocatorTabs = new $j.Avaya.Tabs({
		tabs:list,
		form:form,
		changeCallback:function(){
			$j.Avaya.global.Tracking.clickEvent('Tab_Click');
			var active = ul.find('li.active');

			if (active.hasClass('quick-search')){
				
				form.removeClass('yourSpanActive');
				partnerName.removeClass('required');
				productSearch.removeClass('required');
				makeRequired(cityWrapper);
				makeRequired(zipWrapper);
				
			} else if (active.hasClass('product-search')){
				
				form.removeClass('yourSpanActive');
				productSearch.addClass('required');
				partnerName.removeClass('required');
				makeRequired(cityWrapper);
				makeRequired(zipWrapper);
				
			} else if (active.hasClass('partner-name')){
				
				form.addClass('yourSpanActive');
				partnerName.addClass('required');
				productSearch.removeClass('required');
				makeOptional(cityWrapper);
				makeOptional(zipWrapper);
				
			}
			
			validation.updateRequired();			
		}
	}); 
	
	//temp check for the country value to turn off the product tab
	var 
		countrySelect = document.getElementById("locaterCountrySelect"),
		selectedValue = countrySelect.options[countrySelect.selectedIndex].value;
	
// :MERGE: Inserted Begin
    var $lbl_metric = $j("#unit-kilometers");
    var $lbl_miles = $j("#unit-miles");
    if(selectedValue.indexOf("United States") < 0 && selectedValue.indexOf("United Kingdom") < 0) {
        $lbl_metric.show();
        $lbl_miles.hide();
    } else {
        $lbl_metric.hide();
        $lbl_miles.show();	
    }
// :MERGE: Inserted End

	for (var i=0;i<noProductCountries.length;i++){
		if (selectedValue == noProductCountries[i]){
			hideProductTab();
			break;
		}
	}
	
	
	form.submit(function(e){
		e.preventDefault();
		
		var error = document.getElementById('errorIndicator');
		var rs = validation.getRequiredString();

		$j('html, body').stop();
		
		if (rs){
			$j('#errorIndicator span.error').html(rs);
//			$j.Avaya.global.Tracking.clickEvent('Locater-Form_Submit');
			error.style.display = 'block';
		} else {
			error.style.display = 'none';
			mapSection.removeClass('active');
			ajaxLoader.css('display', 'block');
			//$j('#mapCanvas').css('display', 'none');
			var params = $j.param(form.find('input:hidden,input:text,select'));
			var sortBy = $j('#sortResultsBy').val();
			params += '&sortBy='+sortBy;
			var zoom = 10;
			
// :MERGE: Inserted Begin
			jsonParam = [
			                {
			                'partnername':$j('#partnername').val(),
			                'city':$j('#city').val(),
			                'state':$j('#locaterStateSelect').val(),
			                'zip':$j('#zip').val().replace(/ /,''),
			                'country':$j('#locaterCountrySelect').val(),
			                'product':'',
			                'size':$j('#size').val(),
			                'area':$j('#area').val(),
			                'distance':$j('#distance').val(),
			                'sortby':$j('#sortResultsBy').val()
			                }
			            ];
// :MERGE: Inserted End

			if (radiusCheckbox.isChecked()){
				var select = $j('#radiusDropdown select').get(0);
				if (select.value && select.value.toLowerCase() != 'select'){
/* :MERGE: Replaced Begin
                    zoom = parseInt(select.value);
*/
				    var radius = select.value;
				    if (radius == 5) {
				        zoom = 11;
				    } else if(radius == 8) {
				        zoom = 10;
				    } else if(radius == 20) {
				        zoom = 8;
				    } else if(radius == 44) {
				        zoom = 7;
				    } else if(radius == 85) {
				        zoom = 6;
				    }
// :MERGE: Replaced End
				}
			}
			
// :MERGE: Inserted Begin
			var thiscountry = $j('#locaterCountrySelect').val();
			var $lbl_metric = $j("#unit-kilometers");
			var $lbl_miles = $j("#unit-miles");
			
			if(thiscountry.indexOf("United States") < 0 && thiscountry.indexOf("United Kingdom") < 0) {
			    $lbl_metric.show();
				$lbl_miles.hide();
			} else {
				$lbl_metric.hide();
				$lbl_miles.show();	
			}

			//setTimeout(function(){ // !!!!REMOVE just for testing loader!!!!!
			//alert(JSON.stringify(jsonParam));
// :MERGE: Inserted End
/* :MERGE: Replaced Begin
            $j.ajax({
	            type:'GET',
	            url:'/_assets/json/addressExample.js',
	            dataType:'json',
	            data:params,
	            success: function(response){
*/
			var partnerLocator = new PartnerLocator();
			partnerLocator.GetPartnerList(JSON.stringify(jsonParam),function(params){
// :MERGE: Replaced End
/* :MERGE: Replaced Begin
                var center = response.center;
                var partners = response.partners;
                $j('#partnerInfo').empty();
                $j('.paginateControls').hide();
                $j('span.resultNumbers').hide();
*/
		        var center = [parseFloat(params.result.center.latitude),parseFloat(params.result.center.longitude)];
				//var center = [40.732,-73.99];
				var partners = params.result.partners;
// :MERGE: Replaced End
				
                if (radiusCheckbox.isChecked() && typeof $j.Avaya.global.sortByDD != 'undefined'){
					$j.Avaya.global.sortByDD.jumpToValue('distance');
				}
				else if (typeof $j.Avaya.global.sortOrder != 'undefined'){
					$j.Avaya.global.sortByDD.jumpToValue($j.Avaya.global.sortOrder);
				}
				else {
					$j.Avaya.global.sortByDD.jumpToValue('partnerlevel');
				}
				
				if ($j(window).height()<700 && typeof USE_POPUP != 'undefined'){
					window.resizeTo(645,700);
				}
					
				if (partners.length <= 0){
                    $j('span.noResults').remove();
					resultNumbers.html($j.Avaya.Error.PartnerLocator.noResults);
					partnerInfoContainer.removeClass('active');
					mapContainer.removeClass('active');
					$j('#plSortResults, #mapToggler').css('visibility','hidden');
					var data = getPartnerLocatorData();
					data.zero = 'y';
/* :MERGE: Removed
					data.resultSet = 'No Results';
*/
					$j.Avaya.global.Tracking.partnerLocator(data);
					$j('.toolbar').hide();
					$j('#mapSection').prepend('<span class="resultNumbers noResults">' + $j.Avaya.Error.PartnerLocator.noResults + '</span>');
				} else {
/* :MERGE: Removed
					if (partners.length > 25) $j('span.resultNumbers').show();
*/
					$j('span.noResults').remove();
					$j('.toolbar').show();
					$j('#plSortResults, #mapToggler').css('visibility','visible');
					if (partners.length == 1){
						resultNumbers.html('1 result found.');
					} else {
/* :MERGE: Replaced Begin
						resultNumbers.html(partners.length + ' results found.');
*/
						resultNumbers.html(partners.length + ' ' + $j.Avaya.Error.PartnerLocator.resultsFound);
// :MERGE: Replaced End
					}
					partnerInfoContainer.addClass('active');
					mapContainer.addClass('active');

/* :MERGE: Removed
                    var data = getPartnerLocatorData();
                    var resultMax = partners.length > 25 ? 25 : partners.length;
                    data.resultSet = '1 - ' + resultMax;
                    $j.Avaya.global.Tracking.partnerLocator(data);
*/

                    $j.Avaya.SifrConfig.masterReplace($j.Avaya.SifrConfig.gothamLight,{
					   selector: '#partnerInfoContainer ul.headers li',
					   css: {
							'.sIFR-root': { 
								'color': '#404040', 
								'font-size': 18,
								'text-align': 'left'
							}
					   },
					   selectable: false
					});
				}
			
				GMAP.processNewResults({center:center,zoom:zoom,partners:partners});
				ajaxLoader.css('display', 'none');
			
			});
		}
	});	
	
	//Check for prepopulated form fields and submit 
	var prepopForm = 0;
	form.find(':text').each(function(){ //, :checkbox, select').each(function(){
		
		if (qs.key[this.name] && qs.key[this.name] != null){
			this.value = qs.key[this.name];
			prepopForm = 1;
		}
		
	});
	
	form.find(':checkbox').each(function(){
		
		if (qs.key[this.name] && qs.key[this.name] == 'checked'){
			this.checked = true;
		}
		
	});
	
	form.find('select').each(function(){
	
		if (qs.key[this.name] && qs.key[this.name] != null){
			
			var opts = this.getElementsByTagName('option');
			for (var i=0;i<opts.length;i++){
			
				if (opts[i].value == qs.key[this.name]){
					var id = $j(this).parents('div.selectParent').eq(0).find('div.selectWrapper').attr('id').split('_')[1];
					var cs = $j.Avaya.global.CustomSelects[id];
					cs.jumpToValue(opts[i].value);
					break;
				}
			}
			
			prepopForm = 1;
		}

	});	
	
	if (prepopForm) form.submit();

	
});

$j.Avaya.Checkbox = function(params){
	
	var settings = $j.extend({
		container:null,
		isChecked:false,
		changeCallback:false
	},params);
	
	var container = settings.container;
	var checkbox = container.find('input:checkbox');

	if (checkbox.get(0).checked == true){
		container.addClass('checked');
	}
	
	container.mouseup(function(e){
		_toggle();
	});
	
	checkbox.focus(function(){
		container.addClass('focused');
	});
	
	checkbox.blur(function(){
		container.removeClass('focused');
	});
	
	checkbox.change(function(){
	
		if(checkbox.get(0).checked==true){
			//container.addClass('checked');
		} else {
			//container.removeClass('checked');
		}
	});
	
	function _toggle(){
		container.toggleClass('checked');
		if (checkbox.get(0).checked == true){
			checkbox.get(0).checked = false;
		} else {
			checkbox.get(0).checked = true;
		}
		checkbox.get(0).focus();
		
		if (typeof settings.changeCallback == 'function'){
			
			settings.changeCallback();
		}
	}
	
	
	this.isChecked = function(){
		if (checkbox.get(0).checked){
			return true;
		}
		return false;
	};
}

$j.Avaya.Validation = function(params){
	
	var settings = $j.extend({
		form : null,
		wrapperClass : 'form-section'
	},params);
	
	if (settings.form==null) return;
	
	var required = settings.form.find('.required');
	var rfs = [];
	var allerrs = '';
	var cityZipGroup = new $j.Avaya.RequiredGroup();
	
	function _checkRequired(){
		
		for (var i=0;i<rfs.length;i++){
			var field = rfs[i].check();
			if (field && !field.valid && field.text){
				allerrs += field.text +', ';
			}
		}
	}
	
	function _setRequired(){
		
		for (var i=0;i<rfs.length;i++){
			rfs[i].checkRequired();
		}
		rfs = [];
		cityZipGroup.clearGroup();
		
		required.each(function(){
			var $this = $j(this);
			var parent = this.parentNode;
			var minLength = 1;
			var requiredGroup = 0;
			var name = $this.attr('name');
			
			if (name == 'partner-name'){
				minLength = 3;
			}
			else if (name == 'city' || name == 'zip'){
				requiredGroup = cityZipGroup;
			}
			
			while (!parent.className || parent.className.indexOf(settings.wrapperClass)==-1){
				parent = parent.parentNode;
			}
			
			rfs.push(new $j.Avaya.RequiredField({field:$this,wrapper:$j(parent),minLength:minLength,requiredGroup:requiredGroup}));
		});
	}
	
	_setRequired();
	
	//returns false if no errors or the string if there are
	this.getRequiredString = function(){
		allerrs = '';
		
		_checkRequired();
		if (allerrs != ''){
			allerrs = allerrs.replace(/\s*\,\s*$/,'.');
/* :MERGE: Replaced Begin
			return 'Please enter a valid ' + allerrs;
*/
			return $j.Avaya.Error.PartnerLocator.pleaseentervalid + ' ' + allerrs;
// :MERGE: Replaced End
		}
		return false;
	};
	
	this.updateRequired = function(){
		
		required = settings.form.find('.required');
		
		_setRequired();
	};
}

$j.Avaya.RequiredField = function(params){
	
	var self = this;
	var settings = $j.extend({
		field : null,
		wrapper : null,
		checkCallback : 0,
		minLength : 1,
		emailRegEx : new RegExp('^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+$'),
		errorClass : 'error-state',
		requiredGroup : 0
	},params);
	
	if (settings.field==null) return;
	
	var name = settings.field.attr('name');
	var label = settings.wrapper.find('label').eq(0).html();
	var text = label.replace(/<span.*>.*<\/span>\s/gi,'');
	var errorClass = settings.errorClass;
	
	if (settings.requiredGroup){
		this.requiredGroup = settings.requiredGroup;
		this.requiredGroup.addField(this);
	}
	
	this.check = function(){
		
		if (this.requiredGroup){
			return this.requiredGroup.validate(this);
		}
		
		var obj = self.validate();
		
		if (obj.valid){
			self.removeFlag();
		}
		else {
			self.addFlag();
		}
		
		if (typeof settings.checkCallback == 'function'){
			settings.checkCallback();
		}
		
		return obj;
	};
	
	this.validate = function(){
		
		var obj = {
			valid : false,
			name : name,
			value : settings.field.val(),
			text : text
		};
		
		if (obj.value.length >= settings.minLength){
			if (settings.field.hasClass('email')){
				obj.valid = settings.emailRegEx.test(obj.value);
			} else if (settings.field.hasClass('alpha')){
				obj.valid = /^[a-zA-Z\s-']+$/.test(obj.value);
			} else if (settings.field.hasClass('alphaNumeric')){
				obj.valid = /^[a-zA-Z0-9\s-]+$/.test(obj.value);
				} else {
				obj.valid = (obj.value.search(/[<>]/) == -1);
			}
				}
		
		return obj;
	};
	
	this.addFlag = function(){
		settings.wrapper.addClass(errorClass);
	};
	
	this.removeFlag = function(){


		settings.wrapper.removeClass(errorClass);
	};
	
	this.checkRequired = function(){
		if (settings.wrapper.hasClass('disabled')){
			settings.wrapper.removeClass(errorClass);
		}
	};
				}

$j.Avaya.RequiredGroup = function(){
	
	var 
		execute = 1,
		fields = [], 
		valid = 0,
		text = "",
		violation; //for when a field has a value and fails validation
	
	this.clearGroup = function(){
		fields = [];
	};
	
	this.addField = function(field){
		fields.push(field);
	};
	
	this.validate = function(field){
		var i, obj, ret = 0;
		valid = 0, text = "", violation = 0;
		
		if (execute) {
			execute = 0; //only validates the first time a group validation is called

			for (i=0;i<fields.length;i++){
				obj = fields[i].validate();
				
				if ( obj.valid ){
					valid = 1;
				}
				else if ( !obj.valid && obj.value.length > 0 ){
					valid = 0;
/* :MERGE: Replaced Begin
                    text += obj.text + " or ";
*/
					text += obj.text + " " + $j.Avaya.Error.PartnerLocator.wordor + " ";
// :MERGE: Replaced End
					fields[i].addFlag();
					violation = 1;
                }
                else {
/* :MERGE: Replaced Begin
                    text += obj.text + " or ";
*/
					text += obj.text + " " + $j.Avaya.Error.PartnerLocator.wordor + " ";
// :MERGE: Replaced End
					fields[i].addFlag();
		        }
		    }
		
			if (valid && !violation){
				text = "";
				for (i=0;i<fields.length;i++){
					fields[i].removeFlag();
				}
			}
			else if (violation){
				valid = 0;
            }
		
			text = text.replace(/\sor\s$/,'');
			ret = {valid: valid, text: text};
        }
	
		//reset execute on the last item validation
		if (field == fields[fields.length -1]){
			execute = 1;
	    }
		
		return ret;
	};
}

$j.Avaya.Tabs = function(params){
	
	var settings = $j.extend({
		tabs: null,
		form: null,
		changeCallback: function(){}
	},params);
	
	if (!settings.tabs.get(0)) return;
	
	var qs = new $j.Avaya.QueryString();
	
	this.currentTab = 0;
	
	this.change = function(tab, callback){
		
		settings.tabs.each(function(){
			var $this = $j(this);
			if ($this.hasClass(tab)){
				$this.addClass('active');
			} else {
				$this.removeClass('active');
			}
		});
		
		settings.form.get(0).className = tab;
		$j('#form-view').val(tab);
		
		this.currentTab = tab;
		
		if (typeof callback == "function"){
			callback();
		} else  {
		settings.changeCallback();
	}
		
		for (var i=0; i < $j.Avaya.global.CustomSelects.length; i++){
			
			$j.Avaya.global.CustomSelects[i].resetScrollPane();
			
		}
	};
	
	if (qs.key['tab'] != null){
		this.change(qs.key['tab'], function(){});
	} else {
		this.change('quick-search', function(){});
	}
}

$j.Avaya.Blocker = function(params){
	
	var settings = $j.extend({
		adjustment : 0
	},params);
	
	this.show = function(){
		_adjust();
		params.element.css('display','block');
	}
	
	this.hide = function(){
		params.element.css('display','none');
	}
	
	function _adjust(){
		params.element.height(params.parent.innerHeight() + settings.adjustment);
	}
	
}

$j.Avaya.GoogleMaps = function(params){
	
	var settings = $j.extend({
		mapToggler : null,
		mapContainer : null,
		partnerPageLimit: 25
	},params);
	
	var self = this;
	var map = new GMap2(document.getElementById('mapCanvas'));	
	var partnerInfo = $j('#partnerInfo');
	var geocoder = new GClientGeocoder();	
//	var zoomOffsets = [
//		{lat:40,lon:150},
//		{lat:35,lon:80},
//		{lat:25,lon:39},
//		{lat:12,lon:17},
//		{lat:6.8,lon:9.55},
//		{lat:3.7,lon:4.75},
//		{lat:2.1,lon:2.5},
//		
//		{lat:0,lon:0},
//		{lat:0.45,lon:0.55},
//		{lat:0.25,lon:0.28},
//		{lat:0.12,lon:0.145},
//		{lat:0.055,lon:0.07},
//		{lat:0.03,lon:0.035},
//		{lat:0.015,lon:0.0185},
//		{lat:0.0075,lon:0.009},
//		{lat:0.0035,lon:0.0045}
//		
//	];
	var currentCountryValue = "";
	
	/*** Map Setup ***/
	map.setCenter(new GLatLng(0,0),6);
	map.setMapType(G_PHYSICAL_MAP);
	map.addControl(new GLargeMapControl());
	GEvent.addListener(map,'zoomend',function(){
		map.closeExtInfoWindow();
	});

	settings.mapToggler.click(function(e){
		e.preventDefault();

		if (settings.mapContainer.hasClass('active')){
			settings.mapContainer.removeClass('active');
			this.innerHTML = 'Show Map';
		} else {
			settings.mapContainer.addClass('active');
			this.innerHTML = 'Hide Map';
		}
	})
	
	$j(window).unload(function(){
		GUnload();
	});
	
	$j('#partnerInfo div.partner div.company a').live('click',function(e){
		e.preventDefault();
		$j.Avaya.global.Tracking.clickEvent('GInfoWindow_Open');
		map.closeExtInfoWindow();
		
		var partner = $j(this).parents('div.partner').eq(0);
		var info = partner.data('info');
		var marker = partner.data('marker');
		var point = new GLatLng(info.coords.lat,info.coords.lon);
		var html = _populateGWindow(info);
		
		map.setCenter(point); 
		
		var beakOffset = -10;
		if ($j.browser.msie && $j.browser.version.indexOf('7') > -1) beakOffset = -30
		
		map.panBy(new GSize(-100, 80))
		marker.openExtInfoWindow(map, 'extInfoWindow', html, {beakOffset: beakOffset});
		
		$j('#infoWindowWrapper').find('div.notes, div.company, div.contact').each(function(){
			$j(this).jScrollPane();
		});
		
		$j(window).scrollTop($j('#mapContainer').offset().top);
	});
	
	$j('#infoCloseButton').live('click',function(e){
		e.preventDefault();
		$j.Avaya.global.Tracking.clickEvent('GInfoWindow_Close');
		map.closeExtInfoWindow();
	});
	
	/******* Public *********/
	this.clearMarkers = function(){
		map.clearOverlays();
	};
		
	this.getMap = function() {
		return map;	
	}

/* :MERGE: Replaced Begin
	this.addMarkers = function(partners, addPartnerHTML, clearMarkers, params){
*/
	this.addMarkers = function(partners, addPartnerHTML, clearMarkers){
// :MERGE: Replaced End
		addPartnerHTML = (typeof addPartnerHTML == 'undefined') ? true : addPartnerHTML;
		//var bounds = new GLatLngBounds;
		var finalRound = false;
		var sw, ne;
// :MERGE: Inserted Begin		
		if (partners.length <= 0) return;
// :MERGE: Inserted End
		var minLat = partners[0].coords.lat,
			minLng = partners[0].coords.lon, 
			maxLat = partners[0].coords.lat, 
			maxLng = partners[0].coords.lon;
		if (partners.length < settings.partnerPageLimit || addPartnerHTML == false) finalRound = true;
			
		//since pagination can addMarkers as well, don't add/clear multiple times
		if (clearMarkers) this.clearMarkers();
		
		var collection = $j( '<div />' );
		
		$j(partners).each(function(){
			var partner = this;
			var point = new GLatLng(partner.coords.lat,partner.coords.lon);
			var marker = new GMarker(point, { title: partner.name });

			if (finalRound) {
				
				//bounds.extend(point);
				minLat = Math.min(minLat, partner.coords.lat);
				minLng = Math.min(minLng, partner.coords.lon);
				maxLat = Math.max(maxLat, partner.coords.lat);
				maxLng = Math.max(maxLng, partner.coords.lon);
				sw = new GLatLng(minLat, minLng);
				ne = new GLatLng(maxLat, maxLng);
				
				map.addOverlay(marker);

				GEvent.addListener(marker, 'click', function(){
					var html = _populateGWindow(partner);
					map.setCenter(point); 
					
					var beakOffset = -10;
					if ($j.browser.msie && $j.browser.version.indexOf('7.0') > -1) beakOffset = -30
					
					map.panBy(new GSize(-100, 80))
					marker.openExtInfoWindow(map, 'extInfoWindow', html, {beakOffset: beakOffset});
				
					$j('#infoWindowWrapper').find('div.notes, div.company, div.contact').each(function(){
						$j(this).jScrollPane();
					});
				});
			}
			
			if (addPartnerHTML){
				collection.append( _appendPartner( partner, marker ) );
			}
			
		});

		partnerInfo.append( collection.children() );
        
		//IE just needs a little timeout to recalc new bounds
		if (finalRound) {
			var bounds = new GLatLngBounds(sw,ne);

				map.setCenter( bounds.getCenter(), map.getBoundsZoomLevel( bounds ) );

				self.scrollToMap();
				_adjustFooter();

		}
		
		if (addPartnerHTML) {
			if (partners.length > settings.partnerPageLimit) {
			    _paginatePartners(partners);
/* :MERGE: Removed
			} else if ($j.browser.msie) {
				if (partners.length == settings.partnerPageLimit) {
					this.addMarkers(partners, false, true);
				} else if ($j.browser.msie && map.getZoom() < 3) {
					this.processNewResults(params);
				}
*/
			}
		}
	};
		
	this.scrollToMap = function() {
		var mapSection = mapSection || $j('#mapSection');
		mapSection.addClass('active');					
		$j('#mapCanvas').css('display', 'block');
		$j('html, body').stop();
		$j('html, body').animate({
			scrollTop : mapSection.offset().top
		},{
			duration : 1000,
			easing : 'easeinout'
		});	
	}
	
	this.processNewResults = function(params){	
		var partners = params.partners;
		var clearMarkers = partners.length > settings.partnerPageLimit ? false : true;
		partnerInfo.html('');
		currentCountryValue = $j("#locaterCountrySelect").val();
/* :MERGE: Replaced Begin
		this.addMarkers(partners, true, clearMarkers, params);
*/
		this.addMarkers(partners, true, clearMarkers);
// :MERGE: Replaced End		
		$j(".gmnoprint").show();		
	}
	
	/******* Private ********/
	function _adjustFooter() {
		$j('#footer').css('visibility','hidden');
		$j.Avaya.Page.Sizing.resize();
		$j('#footer').css('visibility','visible');
	}
	
	function _paginatePartners(partners) {
		$j.Avaya.global.pagination = new $j.Pagination({
			$element: $j('#partnerInfo'),
			$items: $j('div.partner'),
			$status: $j('span.resultNumbers'),
			$controls: $j('div.paginationControls'),
			itemsPerPage: 25,
			map: self
		});
/* :MERGE: Replaced Begin
		if ($j.browser.msie && map.getZoom() == 0) $j.Avaya.global.pagination.showPage(1, false);
*/
		if ($j.browser.msie && map.getZoom() == 0) $j.Avaya.global.pagination.showPage(1);
// :MERGE: Replaced End
	}
	
	function _appendPartner(partner,marker){
		
		var units = ' km.';
		
		if ($j('#unit-miles').css('display') == 'block'){
			units = ' mi.';
		}
		
		var name = '<p><a href="javascript:void(0);" class="map-trigger">'+partner.name+'</a></p>';
/* :MERGE: Replaced Begin
		var distance = (partner.address.distance) ? '<p>(distance '+partner.address.distance+units+')</p>' : '';
*/
		var distance = (partner.address.distance) ? '<p>('+ $j.Avaya.Error.PartnerLocator.distance + ' '+partner.address.distance+units+')</p>' : '';
// :MERGE: Replaced End
		var street = '<p>'+partner.address.street+'</p>';
		var state = (partner.address.state.length > 0) ? partner.address.state + ' ' : '';
		var country = (currentCountryValue != partner.address.country) ? ", "  + partner.address.country : "";
		var zip = (partner.address.zipPostalCode && partner.address.zipPostalCode.length > 0) ? partner.address.zipPostalCode : '';
		var region = '<p>' + partner.address.city + ', ' + state + zip + country + '</p>';
		var contact = _getContactInfo(partner, 27);

        var div = $j('<div class="partner"><div class="company">'+name+distance+'<div class="address">'+street+region+'</div></div><div class="contact">'+contact.phone+contact.email+contact.website+'</div><div class="notes">'+contact.notes+contact.awards+'</div></div>');

		div.data('info', partner);
		div.data('marker',marker);
		//partnerInfo.append(div);
		
		return div;
	}
	
	function _populateGWindow(partner){
		
		var state = (partner.address.state.length > 0) ? partner.address.state + ' ' : '';
		var zip = (partner.address.zipPostalCode.length > 0) ? partner.address.zipPostalCode : '';
		var country = (currentCountryValue != partner.address.country) ? ", "  + partner.address.country : "";
		var address = '<p>' + partner.address.street + ' ' + partner.address.city + ', ' + state + zip + country + '</p>';
		var contact = _getContactInfo(partner, 22);

		return '<div id="infoWindowWrapper"><a href="javascript:void(0);" id="infoCloseButton"></a><div class="partner"><div class="company"><p class="bold">'+partner.name+'</p><div class="address">'+address+'</div></div><div class="contact">' + contact.phone + contact.email + contact.website +'</div><div class="notes">'+contact.notes+contact.awards+'</div></div></div>';
	}
	
	function _getContactInfo(partner, breakLength){
		var phone = (partner.contact.phone) ? '<p class="phone"><span>'+partner.contact.phone+'</span></p>' : '';
/* :MERGE: Replaced Begin
		var email = '<p class="email"><span><a id="partner_'+partner.id+'" class="email-trigger" href="#'+partner.name+'">Send mail</a></span></p>';
*/
		var email = '<p class="email"><span><a id="partner_'+partner.id+'" class="email-trigger" href="#'+partner.name+'">' + $j.Avaya.Error.PartnerLocator.sendEmail + '</a></span></p>';
// :MERGE: Replaced End
		var website = '';
		var notes = '';
		var awards = '';
		
		if (partner.contact.website){
			var url = partner.contact.website;
			if (partner.contact.website.indexOf('http')==-1){
				url = 'http://' + partner.contact.website;
			}
/* :MERGE: Replaced Begin
			website = '<p><span class="site"><a href="'+url+'" target="_blank">Visit website</a></span></p>';
*/
			website = '<p><span class="site"><a href="'+url+'" target="_blank">' + $j.Avaya.Error.PartnerLocator.visitWebsite + '</a></span></p>';
// :MERGE: Replaced End
		}

		notes += '<ul>';
/* :MERGE: Replaced Begin
		for(var i=0;i<partner.notes.length;i++) notes += '<li>'+partner.notes[i]+'</li>';
*/
		    var nts = partner.notes.split(',');
		    for(p=0;p<nts.length;p++) {
		        notes = notes + '<li>' + nts[p] + '</li>';
		    }
// :MERGE: Replaced End
		notes += '</ul>';

		if(typeof partner.awards != 'undefined'){
			awards += '<ul class="awards">';
			for(award in partner.awards) awards += '<li class="'+award+'">'+partner.awards[award]+'</li>';
			awards += '</ul>';
		}
		
		var obj = {
			phone : phone,
			email : email,
			website : website,
			notes : notes,
			awards : awards
		}
		
		return obj;
	}
	
	function _truncate(string, length){
		
		if (string.length > length)
		{
			return string.substr(0,length) + '...';
		}
		
		return string;
	}
	
	function _breakLine(string){
		var sectionArray = [];
		var newString = '';
		var len = 20;
		
		while (string.length > len){
			sectionArray.push(string.substr(0,len));
			string = string.substr(len);
		}
		
		if (string.length > 0){
			sectionArray.push(string);
		}
		
		for (var i=0;i<sectionArray.length;i++){
			if (i<sectionArray.length-1){
				newString += sectionArray[i] + "<wbr />";
			}
			else {
				newString += sectionArray[i];
			}
		}
		return newString;
	}
}

//add countries in here to match their values in the country select
var noProductCountries = [
		'Germany', 'France', 'Russia', 'Italy','Spain','Russian Federation','Austria','Czech Republic','Hungary','Netherlands','Slovakia','Switzerland','Turkey','Poland','Greece','Australia','China','Japan','Korea, Republic of'
];
	

