ASC.namespace('ASC.Chrysler.FAD.WhatIsThis');
ASC.Chrysler.FAD.WhatIsThis = ASC.extend(Ext.util.Observable, {	
	layer: null,
	constructor: function ()
	{
		ASC.Chrysler.FAD.WhatIsThis.superclass.constructor.apply(this);		
	},
		
	initLayer: function ()
	{
		this.layer = new Ext.Layer({
			dh: {tag: "div", cls:'popup_frame_whatisthis'},
			zindex: 11000
		});
		var whatIsThisTpl = new Ext.XTemplate(
			    	'<div class="popup_close_whatisthis"><a href="javascript:void(0);"><img src="{[this.getImgLocalePath()]}/fad/fad_icon_16.gif" /></a></div>',
			    	'<div class="popup_title_whatisthis">{[this.translate("fad_findDealers_whatIsAPreferredDealer")]}</div>',
			        '<div class="popup_info_whatisthis">{[this.translate("fad_findDealers_whatIsAPreferredDealerInfo")]}</div><div class="clearboth"></div>',				       
			        {					
						translate: function (key)
						{
							return String.format(ASC.message(key), Page.brand);
						},
						getImgLocalePath: function(){
							return ASC.cfg.getImgLocalePath();
						}
				});
		whatIsThisTpl.overwrite(this.layer);
		var closeButton = this.layer.dom.getElementsByTagName('a')[0];
		ASC.getEl(closeButton).on('click',function(){
				this.layer.hide();
				ASC.Chrysler.trackLinkMetrics('dealer_specific_info','preferred_dealer_definition_close');
			},this);
	},
	
	show: function (anchorTarget)
	{
		if(this.layer==null){
			this.initLayer();
		}
		this.layer.alignTo(anchorTarget.parentNode, 'tl', [-325,-97]);
		this.layer.toggle();
	}
});

/*
 * ASC.Chrysler.FAD.ChooseDealer
 * */
 
ASC.namespace('ASC.Chrysler.FAD.ChooseDealer');
ASC.Chrysler.FAD.ChooseDealer = ASC.extend(Ext.Window, {
	
	id:null,
	dealerList:null,
	
	constructor: function (dealerList, cfg)
	{
		var windowId =  this.id = Ext.id();
		this.dealerList = dealerList;
		
		this.initDlgTemplates();				
		var html = this.buildContents();
			
		this.selectBtn = new Ext.Button({
			text: 'FIND DEALER', 
			cls: "x-btn-text",
			scope: this,
			ctCls: 'dlgBtn',
			disabled: false,
			hidden: false,
			handler: function () { 
				var opt = this.getSelectedDealer();
				this.fireEvent('dealerSelected',opt);
				this.destroy();			 
			}								
		});	
		
		var winCfg = ASC.apply({
			id: windowId,
			ctCls: 'ppweb-mustHaveDlg',
			cls :  'chooseDealer',
			title: 'Which dealer were you looking for?',
			headerAsText: true,
			constrainHeader: true,
			draggable: true,
			closable: true,
			plain: true,
			layout: 'fit',
			border: true,
			modal: true,
			resizable: false,
			width: 430,
			
			items: {
				html: html
			},
				
			buttons: [
				this.selectBtn
			]	
		}, cfg);				
		
		ASC.Chrysler.FAD.ChooseDealer.superclass.constructor.call(this, winCfg);	
		
		this.addEvents({
			dealerSelected:true
		});	
		
	},
	
	initDlgTemplates: function ()
	{
		this.chooseDealerTpl = new Ext.XTemplate(
			'<div style="width:410px;height:130px;overflow:auto;">',
			'<table border="0" cellpadding="0" cellspacing="0" class="chooseTable">',
				'<tpl for="dealers">',
					'<tr>',
				   		'<td><input type="radio" id="{dealerCode}" name="chooseDealers_group" {[xindex==1?"checked":""]}></td>',
				   		'<td style="padding-left:10px">{name} in {city} {state}</td>',
					'</tr>',
				'</tpl>',
		   	'</table>',
		   	'</div>'
		);
		this.chooseDealerTpl.compile();				
	},
	
	buildContents: function ()
	{	
		return this.chooseDealerTpl.applyTemplate({
			dealers: this.dealerList,
			windowId: this.id
		});			
	},
	
	getSelectedDealer: function ()
	{			
		var inputs = document.getElementsByName('chooseDealers_group');
		for (var i=0; i<inputs.length; i++) {
			var input = inputs[i];
			if (inputs[i].checked) {
				return inputs[i].id;				
			}
		}				
		return null;	
	}
});


ASC.apply(Page, {
			c_centerUSLat: 39.164141,
			
			c_centerUSLng: -95.80078,
			
			c_pageSize: 4,
			
			c_defaultPage: 1,
			
			c_dealerKey: 'dealers',	

			currentZipCode: null,
			
			centerCity: '',

		    centerState: '',
		    
			brand:null,
			
			currentMarkerId: -1,
			
			dealersData: null,
			
			allDealersData:null,
			
			dealersList: null,

			dealersMap: null,
			
			whatIsThis: null, 
			
			searchRadius:25,

			dealersCache: new Ext.util.MixedCollection(false, function (field) {
				return field.key;	
			}),
			
			//dealerServicesToolTip: null,
			theme:null,
			/* phase 2
			email : new ASC.Fad.EmailThisPage({
                submitUrl : ASC.cfg.getContextPath() + '/fad/emailDirections.ajax'
            }), 
        	*/
        	
        	isAdvancedSearchEdit:false,
        	
			init: function()
			{			
				ASC.getEl('as_edit').setDisplayed('none');	
				window.alert = function(msg){
					Ext.Msg.alert('', msg);
				};
				if(ASC.Chrysler.Cookies.getPreferredDealer()!=null && ASC.Chrysler.Cookies.getPreferredDealer()!=''){
					ASC.Chrysler.trackPageMetrics('/en/dealer_locator/preferred_dealer');				
				}
				this.whatIsThis = new ASC.Chrysler.FAD.WhatIsThis();
				this.initAjax();
	     		this.initPage();
				if(!this.dealersMap)
				{
					this.initMap();
				}			
				this.initShowMyPreferredDealer();
				this.setupEvent();
				this.initDealerServicesInfo();

				this.initValidZipCode();
			},
			
			locateDealer: function(selectedDealerCode){
				var dealers = this.allData.dealers;
				var len =dealers.length;
				
				for(var i=0;i<len;i++)
				{
					if(dealers[i].dealerCode == selectedDealerCode)
					{
						this.ajax.sendRequest('LOCATEDEALERSAJAX', {
							params: {
							zipCode  :dealers[i].zip.substring(0,5)
							}
						});
						break;
					}
				}
				
			},
			initShowMyPreferredDealer:function(){
				var preferredDealerCode = ASC.Chrysler.Cookies.getPreferredDealer();//ASC.Cookies.get("pd");
				var elShowMyPreferredDealer = ASC.getEl('showMyPreferredDealer');
				if( preferredDealerCode == null || preferredDealerCode == 'null' ||  preferredDealerCode == ''){
					elShowMyPreferredDealer.setDisplayed("none");	
				}else{
					elShowMyPreferredDealer.setDisplayed("block");
				}
				/*
				if(preferredDealerCode!=null && preferredDealerCode!=""){
					if(this.allDealersData!=null && this.allDealersData.length>0){						
						for(i=0;i<this.allDealersData.length;i++){							
							if(this.allDealersData[i].dealerCode==preferredDealerCode){	
								elShowMyPreferredDealer.setDisplayed("block");		
								return;
							}						
						}
					}
				}
				*/
			},
			
			setupEvent:function(){
				var imgLocalePath = ASC.cfg.getImgLocalePath();
				ASC.getEl('dimaNav').on('click', function(){
					Page.activateDealersInMyAreaTab();
					window.document.title = ASC.message("title");
				});
				
			
				ASC.getEl('asNav').on('click', function(){
					ASC.getEl('advancedSearch').setDisplayed('block');
					ASC.getEl('commonSearch').setDisplayed('none');
					ASC.getEl('headerToolBar').setDisplayed('none');
					var dima = 	ASC.getEl('dimaNav');
				    var adsh =  ASC.getEl('asNav');
				    adsh.dom.className = "tag_navigation_left2_active";
				    dima.dom.className="tag_navigation_left1_inactive";
				    
				    ASC.getEl('dima_text').dom.innerHTML = ASC.message('fad_dima_title2');
				    ASC.getEl('dima_search_textfield').setDisplayed('none');
				    ASC.getEl('dima_search_bttn').setDisplayed('none');
				    Page.isAdvancedSearch = true;
				    //ASC.getEl("searchedSpan").setDisplayed("none");
				});
					
				
				ASC.getEl('showMyPreferredDealer').on('click', this.showMyPreferredDealer, this);
			},
			
			activateDealersInMyAreaTab: function(){
				ASC.getEl('advancedSearch').setDisplayed('none');
				ASC.getEl('commonSearch').setDisplayed('block');
				ASC.getEl('headerToolBar').setDisplayed('block');
				var dima = 	ASC.getEl('dimaNav');
				var adsh =  ASC.getEl('asNav');
				adsh.dom.className = "tag_navigation_left2";
				dima.dom.className="tag_navigation_left1";
					
				ASC.getEl('dima_text').dom.innerHTML = ASC.message('fad_dima_title1');
				ASC.getEl('dima_search_textfield').setDisplayed('block');	
				ASC.getEl('dima_search_bttn').setDisplayed('block');
				if(this.isAdvancedSearchEdit){
					ASC.getEl('as_edit').setDisplayed('');
				}else{
					ASC.getEl('as_edit').setDisplayed('none');
				}
				this.isAdvancedSearch = false;	
			},
			
			showMyPreferredDealer:function(){
				this.isAdvancedSearch = false;
				this.displayOnly4Dealers = true;
				this.displayDealersPopup = false;
				
				var preferredDealerCode = ASC.Chrysler.Cookies.getPreferredDealer();
	
				if(this.allDealersData!=null && this.allDealersData.length>0){
					for(i=0;i<this.allDealersData.length;i++){
						if(this.allDealersData[i].dealerCode==preferredDealerCode){
							this.displayOnly4Dealers = true;
							this.ajax.sendRequest('LOCATEDEALERSAJAX', {
								params: {
									zipCode  :this.allDealersData[i].zip.substring(0,5)
									
								}
							});
							return;
						}					
					}
					this.ajax.sendRequest('DEALERINFOAJAX', {
						params: {
							showPreferredDealer  :true,
							dealerCode: preferredDealerCode	
						}
					});
					
				}
			},
			
			jumpToMyPreferredDealer:function(dealerCode,xIndex,pageIndex){
				//jump to the dealer list page,which include my preferred dealer.
				if(this.dealersData.pageIndex!=pageIndex){
					this.dealersData.setPageIndex(pageIndex);
				}
				//show my preferred dealer
				this.dealersList.clickDealerInfo(xIndex);
			},
			initMap: function()
			{
				this.dealersMap = new ASC.Chrysler.FAD.DealersMap({
					
					renderTo: "dealerMap",

					dealerData: this.dealersList?this.dealersList.dealerData:null,
							
					lat: this.dealersList?this.dealersData.centerLatitude:Page.c_centerUSLat,

					lng: this.dealersList?this.dealersData.centerLongitude:Page.c_centerUSLng,

					zoom: this.dealersList?8:4,

					controls: [new GLargeMapControl(),new GMapTypeControl()]
				});
				this.dealersMap.on('clickMarker',this.onClickMarker,Page);
				this.dealersMap.on('showMoreDealerInfo',this.onShowMoreDealerInfo,Page);
				this.dealersMap.on('afterPushPin',this.onAfterPushPin,Page);
				this.dealersMap.dealerHoursWidget= new ASC.Chrysler.dealerHours({});
				if(this.dealersList)
				{
					this.dealersMap.pushDealerPin();
				}
			},
			dealersCount: 0,
			initDealers: function(data)
			{
				this.centerCity		= data.centerCity;
			    this.centerState	= data.centerState;
				this.allDealersData = data.dealers;
				this.dealersData = new ASC.Chrysler.Pagination(data,this.c_pageSize, this.c_dealerKey);
				this.dealersData.on('indexChanging',this.onIndexChanging,Page);
			
				this.dealersList = new ASC.Chrysler.FAD.DealerList(this.dealersData.getItems(1), {
					renderTo: 'dealers',
					renderToPageBar: 'pageBar',
					pageIndex: this.dealersData.pageIndex,
					pageCount: this.dealersData.pageCount,
					pageSize: this.c_pageSize	
				});
				this.dealersList.on("clickDealerInfo",this.onClickDealerInfo,Page);
				if(!this.dealersMap)
				{
					this.initMap();
				}
				else
				{	
					this.dealersMap.dealerPageIndex= 1;
					this.dealersMap.setData(this.dealersList.dealerData);
				}
				this.setIndexArrow();
				this.initShowMyPreferredDealer();
			},				
			initPageLoadData: function(data)
			{
				this.allDealersData = data;
				if(data && data.dealers && data.dealers.length > 0)
				{
					this.initDealers(data);					
				}else{
					ASC.getEl("dealerSearch").setDisplayed("block");
					if(this.currentZipCode){
						alert(ASC.message("noDealer"));
					}
				}	
			},
			initAjax: function()
			{
				this.ajax.registerRequest('LOCATEDEALERSAJAX', ASC.cfg.getContextPath() + '/fad/locateDealers.ajax');
				this.ajax.registerRequest('DEALERINFOAJAX', ASC.cfg.getContextPath() + '/fad/dealerInfo.ajax');
				this.ajax.registerAjaxObject('locateDealers', new ASC.Ajax.Response({
					events: {
						success: {
							fn: this.ajaxCB.getLocateDealers,
							scope: Page
						}
					}
				}));
				this.ajax.registerAjaxObject('dealerInfoData', new ASC.Ajax.Response({
					events: {
						success: {
							fn: this.ajaxCB.getDealerInfo,
							scope: Page
						}
					}
				}));
				this.ajax.registerAjaxObject('showPreferredDealer', new ASC.Ajax.Response({
					events: {
						success: {
							fn: this.ajaxCB.showPreferredDealer,
							scope: Page
						}
					}
				}));
			},
			
			displayDealersPopup:true,
			displayOnly4Dealers:false,
			ajaxCB: {	
				showPreferredDealer: function(response, ioArgs){
					if( response.data.dealer != null ){
						var zipCode = response.data.dealer.zip;
						if( zipCode ){
							zipCode = zipCode.substring(0,5);
							this.ajax.sendRequest('LOCATEDEALERSAJAX', {
								params: {
									zipCode: zipCode
								}
							});
						}
					}
				},			
				getLocateDealers: function (response, ioArgs)
				{
				    if(this.directions)
						this.directions.clear();
					var m = ASC.getEl('dealerMap');
					var d = ASC.getEl('directionContainer');
					d.setDisplayed('none');
					m.setWidth('100%');
					ASC.getEl("DirectionsDesc").setValue("");
					if(response.data.dealers && response.data.dealers.length > 0){
						var radius = ASC.getEl("search_zipDistance").getValue();
						Page.searchRadius = parseInt(radius);
						if( this.isAdvancedSearch &&  ASC.getEl("search_dealerName").getValue() && response.data.dealers.length > 1 && this.displayDealersPopup){
							var events = {
								dealerSelected: {
									fn: function (dealer) {
										Page.displayDealersPopup = false;
										Page.locateDealer(dealer);
									}
								},
								beforehide: {
									fn: function(){
										Page.displayDealersPopup = true;
									}
								}										
							};
							this.allData = response.data;
							this.displayOnly4Dealers = true;
							var chooseDealerWindow = new ASC.Chrysler.FAD.ChooseDealer(response.data.dealers);
							chooseDealerWindow.on(events);
							chooseDealerWindow.show();
						}else if(this.isAdvancedSearch &&  ASC.getEl("search_dealerName").getValue() && response.data.dealers.length == 1){
							this.allData = response.data;
							Page.displayDealersPopup = false;
							this.displayOnly4Dealers = true;
							var dealerCode = response.data.dealers[0].dealerCode;
							this.locateDealer(dealerCode);
						}else{
							ASC.getEl('advancedSearch').setDisplayed('none');
							ASC.getEl('commonSearch').setDisplayed('block');
							ASC.getEl('headerToolBar').setDisplayed('block');
							this.dealersMap.map.checkResize();
							if(this.displayOnly4Dealers){
								var dealersNo = 4;
								if( response.data.dealers.length <4 ){
									dealersNo = response.data.dealers.length;
								}
								var newDealers = [];
								for( i=0; i<dealersNo; i++ ){
									newDealers[i] = response.data.dealers[i];
								}
								response.data.dealers = newDealers;
								this.displayOnly4Dealers = false;
								this.displayDealersPopup = true;
							}
							//this.activateDealersInMyAreaTab();
							this.initDealers(response.data);
						}						
					}else{
						if(this.isAdvancedSearch)
						{
							var dealerName = ASC.getEl("search_dealerName").getValue();
		  					var city = ASC.getEl("search_city").getValue();
							var state = ASC.getEl("search_state").getValue();
							var dealerName = ASC.getEl("search_dealerName").getValue();
							var radius = ASC.getEl("search_zipDistance").getValue();
							Page.searchRadius = parseInt(radius);
							var zipCode = ASC.getEl("search_zipCode").getValue();
							var errorEl;
							this.searchCriteriaTheme = ASC.util.objectToQuery(ASC.util.formToObject(this.theme+'Form'));
							
							var isValidCityState = false;//response.data.isValidCityState;						
							if( response.data.isValidCityState && response.data.isValidCityState == "Y" ){
								isValidCityState = true;
							}
							
							if(dealerName){
								if( this.searchCriteriaTheme && radius || radius || this.searchCriteriaTheme ){
									errorEl = ASC.getEl("error_services");
									errorEl.setDisplayed("block");
									errorEl.setValue(ASC.message("fad_as_noDealers"));
									return;
								}
								errorEl = ASC.getEl("error_dealerName");
								errorEl.setDisplayed("block");
								errorEl.setValue(ASC.message("error_dealerName"));
								return;
							}else if(zipCode){
								if( this.searchCriteriaTheme && !radius ){
									errorEl = ASC.getEl("error_services");
									errorEl.setDisplayed("block");
									errorEl.setValue(ASC.message("error_services"));
									return;
								}
								errorEl = ASC.getEl("error_services");
								errorEl.setDisplayed("block");
								errorEl.setValue(ASC.message("fad_as_noDealers"));
								return;
							}if(city && state){
								if( isValidCityState ){
									if(this.searchCriteriaTheme && radius || radius){
										errorEl = ASC.getEl("error_services");
										errorEl.setDisplayed("block");
										errorEl.setValue(ASC.message("fad_as_noDealers"));
										return;
									}else if(this.searchCriteriaTheme){
										errorEl = ASC.getEl("error_services");
										errorEl.setDisplayed("block");
										errorEl.setValue(ASC.message("error_services"));
										return;
									}
									errorEl = ASC.getEl("error_services");
									errorEl.setDisplayed("block");
									errorEl.setValue(ASC.message("fad_as_noDealers"));
									return;
								}else{
									errorEl = ASC.getEl("error_cityState");
									errorEl.setDisplayed("block");
									errorEl.setValue(ASC.message("error_citystate"));
									return;
								}
							}
/*							if(this.searchCriteriaTheme)
							{
								errorEl = ASC.getEl("error_services");
								errorEl.setDisplayed("block");
								errorEl.setValue(ASC.message("error_services"));
								return;
							}
							if((dealerNameEl.getValue()) && !this.searchCriteriaTheme)//dealer name spelling error
							{
								errorEl = ASC.getEl("error_dealerName");
								errorEl.setDisplayed("block");
								errorEl.setValue(ASC.message("error_dealerName"));
								return;
							}else if( ASC.getEl("search_zipCode").getValue() && !this.searchCriteriaTheme ){
								errorEl = ASC.getEl("error_services");
								errorEl.setDisplayed("block");
								errorEl.setValue(ASC.message("fad_as_noDealers"));
							}else if(cityEl.getValue()&&stateEl.getValue() && !this.searchCriteriaTheme)//city/state combination error
							{
								errorEl = ASC.getEl("error_cityState");
								errorEl.setDisplayed("block");
								errorEl.setValue(ASC.message("error_citystate"));
								return;
							
							}
*/
						}else{
							alert(ASC.message("noDealer"));
						}
					}
					
//					if( this.isAdvancedSearch ){	
//				        ASC.getEl("searchedSpan").setDisplayed("");
			  					
//			  			var criteria = this.getSearchCriteria();
//			  			var cityEl = ASC.getEl("search_city");
//			  		  	var stateEl = ASC.getEl("search_state");
			  		  	
//			  		  	var innerValue = criteria.length > 20? criteria.substring(0,20)+"...":criteria;
//			  			ASC.getEl("searchCriteria").setValue(innerValue);
			  			//ASC.getEl("searchCriteria").dom.innerHTML = innerValue;
//			  			ASC.getEl("searchCriteria").set({"title":criteria});
//		  			}				
				},
				getDealerInfo: function (response, ioArgs)
				{
					this.dealersCache.add({key: response.data.dealer.dealerCode, data: response.data, ioArgs: ioArgs});
					this.dealersMap.showMoreDealerInfo(Page.currentMarkerId,response.data);
				}
			},
			
			eventCB: {
				
			},	
			
			initValidZipCode:function()
			{
				this.zipCodeValidator = new ASC.Chrysler.ZipValidator({ajax:this.ajax});
				ASC.apply(this.zipCodeValidator,{
					handleZipValidation: function (response, ioArgs)
					{			
						var isValidZipCode=(response.data=='true');
						
						if(isValidZipCode)
						{
							if(Page.isAdvancedSearch){
								Page.getLocateDealersAS();
							}else{
								Page.getLocateDealers({zipCode:Page.currentZipCode});
							}							
						}
						else
						{
							if(Page.isAdvancedSearch){
								ASC.getEl('error_zipCode').setValue(ASC.message('fad_findDealers_zipCodeError'));
								ASC.getEl('error_zipCode').setDisplayed('block');
								return;
							}
							alert(ASC.message("fad_findDealers_zipCodeError"));
						}
						
					}
				});
		   		

			},
			showDealerServices:function(){
				ASC.getEl("jeepServices").dom.style.display = 'none';	
				ASC.getEl("dodgeServices").dom.style.display = 'none';	
				ASC.getEl("chryslerServices").dom.style.display = 'none';					
				if(this.theme=="jeep"){
					ASC.getEl("jeepServices").dom.style.display = 'block';
				}else if(this.theme=="dodge"){
					ASC.getEl("dodgeServices").dom.style.display = 'block';
				}else if(this.theme=="chrysler"){
					ASC.getEl("chryslerServices").dom.style.display = 'block';
				}	
			},

			initDealerServicesInfo:function(){
				//jeep				
			 	if(this.theme=="jeep"){
				 	this.setToolTip('img_jeep_getAQuote',ASC.message("svcGetAQuote"));
									
				 	this.setToolTip('img_jeep_inventorySearch',ASC.message("svcInventorySearch"));		
				
				 	this.setToolTip('img_jeep_scheduleATestDrive',ASC.message("svcTestDrive"));	

				 	this.setToolTip('img_jeep_scheduleAServiceAppointment',ASC.message("svcAppointment"));	

				 	this.setToolTip('img_jeep_seHablaEspanol',ASC.message("svcSHE"));	

				 	this.setToolTip('img_jeep_fiveStar',ASC.message("svcFiveStar"));		
				
				}else if(this.theme=="dodge"){
				//dodge
					this.setToolTip('img_dodge_getAQuote',ASC.message("svcGetAQuote"));									
								
					this.setToolTip('img_dodge_inventorySearch',ASC.message("svcInventorySearch"));									
								
					this.setToolTip('img_dodge_scheduleATestDrive',ASC.message("svcTestDrive"));									
								
					this.setToolTip('img_dodge_scheduleAServiceAppointment',ASC.message("svcAppointment"));									
								
					this.setToolTip('img_dodge_seHablaEspanol',ASC.message("svcSHE"));									
								
					this.setToolTip('img_dodge_fiveStar',ASC.message("svcFiveStar"));									
								
					this.setToolTip('img_dodge_businessLink',ASC.message("svcBusinessLink"));									
								
					this.setToolTip('img_dodge_ram4500&5500ChassisCabs',ASC.message("svcRam"));									
								
					this.setToolTip('img_dodge_sprinter',ASC.message("svcSprinter"));									
					
				}else if(this.theme=="chrysler"){
				//chrysler
					this.setToolTip('img_chrysler_getAQuote',ASC.message("svcGetAQuote"));									
								
					this.setToolTip('img_chrysler_inventorySearch',ASC.message("svcInventorySearch"));									
								
					this.setToolTip('img_chrysler_scheduleATestDrive',ASC.message("svcTestDrive"));									
								
					this.setToolTip('img_chrysler_scheduleAServiceAppointment',ASC.message("svcAppointment"));									
								
					this.setToolTip('img_chrysler_seHablaEspanol',ASC.message("svcSHE"));
																	
					this.setToolTip('img_chrysler_fiveStar',ASC.message("svcFiveStar"));
				}
			},		
			setToolTip: function(target, info)
			{
				var ttl = new Ext.ToolTip({
				    target: target,
				    html: '<span>'+ String.format(info,this.brand) +'</span>',
				    floating: true,
				    width: 300,
				    shadow: false,
				    dismissDelay: 0		    
				});
			},							 
			getLocateDealers: function(options)
			{
				this.currentZipCode = options.zipCode;
				ASC.Chrysler.Cookies.setZipCode(options.zipCode);
				this.ajax.sendRequest('LOCATEDEALERSAJAX', {
					params: {
						zipCode: options.zipCode
					}
				});
			},
			getDealerInfo: function(options)
			{
				this.currentMarkerId = options.markerId;
				var cache = this.dealersCache.get(options.dealerCode);
				if(!cache)
				{
					this.ajax.sendRequest('DEALERINFOAJAX', {
						params: {
							dealerCode: options.dealerCode
						}
					});
				}
				else
				{
					this.dealersMap.showMoreDealerInfo(this.currentMarkerId, cache.data);
				}
			},
			searchCriteriaExceptTheme:null
			,
			searchCriteriaTheme:null
			,
			isAdvancedSearch:false
			,
  			findDealers:function()
  			{
  				ASC.getEl("error_cityState").setDisplayed('none');
				ASC.getEl("error_dealerName").setDisplayed('none');
				ASC.getEl("error_services").setDisplayed('none');
				ASC.getEl('error_zipCode').setDisplayed('none');
				ASC.getEl('error_combination').setDisplayed('none');
				this.isAdvancedSearchEdit = true;
  				if(this.advancedSearchValidate()){
	  				var zip = ASC.getEl('search_zipCode').getValue();
	  				if(zip && zip != '')
		  			{
		  				if(!ASC.util.isZip(zip))
		  				{
							ASC.getEl('error_zipCode').setValue(ASC.message('fad_findDealers_zipCodeError'));
							ASC.getEl('error_zipCode').setDisplayed('block');
							ASC.getEl('search_zipCode').focus();
							return;
		  				}
		  				else
		  				{
							this.zipCodeValidator.validateZip('search_zipCode');
		  				}
		  			}else{
		  				this.getLocateDealersAS();
		  			}
	  			}
	  		},
	  		
	  		getLocateDealersAS: function(){
	  			var zipCodeEl = ASC.getEl('search_zipCode');
	  			var stateEl = ASC.getEl('search_state');
	  			var cityEl = ASC.getEl('search_city');
	  			var dealerEl = ASC.getEl('search_dealerName');
	  			
	  			var zipCodeValue = '';
	  			var stateValue = '';
	  			var cityValue = '';
	  			var dealerNameValue = '';
	  			
	  			if( dealerEl.getValue() ){
	  				dealerNameValue = dealerEl.getValue()
	  			}else if( zipCodeEl.getValue() ){
	  				zipCodeValue = zipCodeEl.getValue();
	  			}else if( stateEl.getValue() && cityEl.getValue()){
	  				stateValue = stateEl.getValue();
	  				cityValue = cityEl.getValue();
	  			}
	  			
	  			this.ajax.sendRequest('LOCATEDEALERSAJAX', {
  					forms: [this.theme+'Form','radiusForm'],
  					params:
  					{
  						dealerName:dealerNameValue,
  						city:cityValue,
  						state:stateValue,
  						zipCode:zipCodeValue
  					}
				});
	  		},
	  		
	  		getSearchCriteria:function()
	  		{
				var criteria='';
				var content1 = ASC.util.objectToQuery(ASC.util.formToObject('contentForm'));
				var content2 = ASC.util.objectToQuery(ASC.util.formToObject('radiusForm'));
				if(content1&&content2)
					content1=content1+"&"+content2;
				else if(content2)
					content1 = content2;
				this.searchCriteriaExceptTheme=content1;
				if(this.searchCriteriaExceptTheme)
				{
					var array1 =this.searchCriteriaExceptTheme.split('&');
					if(array1.length)
					{
						var array2;
						var el;
						for(var i=0;i<array1.length;i++)
						{
							array2 = array1[i].split("=");
							
							el = ASC.getEl("search_"+array2[0]);
							if(el.getValue())
							criteria+=";"+el.getValue();
						}
					} 
				}
				this.searchCriteriaTheme = ASC.util.objectToQuery(ASC.util.formToObject(this.theme+'Form'));
				if(this.searchCriteriaTheme)
				{
					var array1 =this.searchCriteriaTheme.split('&');
					if(array1.length)
					{
						var array2;
						var el;
						for(var i=0;i<array1.length;i++)
						{
							array2 = array1[i].split("=");
							
							el = ASC.getEl('lab_'+this.theme+'_'+array2[0]);
							if(el.getValue())
							criteria+=";"+el.getValue();
						}
					} 
					}
				if(criteria.length)
				{
					criteria = criteria.substring(1);
				}
				//alert(criteria);
				return 	criteria;
		    }
	  		,
	  		editSearchCriterial:function()
	  		{
	  			var dima = 	ASC.getEl('dimaNav');
			    var adsh =  ASC.getEl('asNav');
			    adsh.dom.className = "tag_navigation_left2_active";
			    dima.dom.className="tag_navigation_left1_inactive";
			    
			    ASC.getEl('dima_text').dom.innerHTML = ASC.message('fad_dima_title2');
			    ASC.getEl('dima_search_textfield').setDisplayed('none');
			    ASC.getEl('dima_search_bttn').setDisplayed('none');
			    Page.isAdvancedSearch = true;
	  			if(this.searchCriteriaExceptTheme)
				{
					var array1 =this.searchCriteriaExceptTheme.split('&');
					if(array1.length)
					{
						var array2;
						var el;
						for(var i=0;i<array1.length;i++)
						{
							array2 = array1[i].split("=");
							
							el = ASC.getEl("search_"+array2[0]);
							el.setValue(decodeURI(array2[1]));
						}
					} 
				}
				if(this.searchCriteriaTheme)
				{
					var array1 =this.searchCriteriaTheme.split('&');
					if(array1.length)
					{
						var array2;
						var el;
						for(var i=0;i<array1.length;i++)
						{
							array2 = array1[i].split("=");
							
							el = ASC.getEl(this.theme+"_"+array2[0]);
							
							el.dom.checked = true;
						}
					} 
					}
				ASC.getEl('advancedSearch').setDisplayed('block');
				ASC.getEl('commonSearch').setDisplayed('none');
				//ASC.getEl("searchedSpan").setDisplayed('none');
		  	}
	  		,
	  		advancedSearchValidate:function()
	  		{
	  			var cityEl = ASC.getEl("search_city");
	  			var stateEl = ASC.getEl("search_state");
	  			var dealerEl = ASC.getEl("search_dealerName");
	  			var zipCodeEl = ASC.getEl("search_zipCode");
	  			
	  			if((!zipCodeEl.getValue()&&!cityEl.getValue()&&!stateEl.getValue())&&!dealerEl.getValue())
	  			{
	  				ASC.getEl('error_combination').setValue(ASC.message("error_noSpecify"));
	  				ASC.getEl('error_combination').setDisplayed('block');
	  				return false;
	  			}
/*	  			
	  			if(zipCodeEl.getValue() && (cityEl.getValue() || stateEl.getValue()) ||
	  				zipCodeEl.getValue() && dealerEl.getValue() ||
	  				(cityEl.getValue() || stateEl.getValue()) && dealerEl.getValue()){
	  					ASC.getEl('error_combination').setValue(ASC.message('error_combinations'));
	  					ASC.getEl('error_combination').setDisplayed('block');
	  					return false;
	  				}
*/	  			
	  			if(cityEl.getValue()&&!stateEl.getValue())
	  			{
	  				ASC.getEl('error_cityState').setValue(ASC.message("state_required"));
	  				ASC.getEl('error_cityState').setDisplayed('block');
	  				return false;
	  			}
	  			if(!cityEl.getValue()&&stateEl.getValue())
	  			{
	  				ASC.getEl('error_cityState').setValue(ASC.message("city_required"));
	  				ASC.getEl('error_cityState').setDisplayed('block');
	  				return false;
	  				
	  			}
	  			
		  		return true;
	  		}
			,

			showAdvancedSearch: function(b,zipId)
			{		
				if(b)
				{
					var zip = '';
					if(ASC.getEl('zipCode1') && ASC.getEl('zipCode1').getValue() != '') zip = ASC.getEl('zipCode1').getValue();
					if(zip == '' && ASC.getEl('zipCode2').getValue() != '') zip = ASC.getEl('zipCode2').getValue();
					if(zip == '' && this.currentZipCode != '') zip = this.currentZipCode;
					//if(!ASC.util.isZip(zip))
					//{
					//	alert(ASC.message("fad_findDealers_zipCodeError"));
					//	ASC.getEl('zipCode2').focus();
					//	return;
					//}
//					if(ASC.util.isZip(zip))
//					{
//						ASC.getEl('zipCode2').setValue(zip);
//						ASC.getEl('search_zipCode').setValue(zip);
//					}
					
					ASC.getEl('advancedSearch').setDisplayed('block');
					ASC.getEl('commonSearch').setDisplayed('none');
					ASC.getEl('headerToolBar').setDisplayed('none');
					//for page title,keywords,description
					window.document.title = ASC.message("advtitle");
				}
				else
				{					
					if(!this.validateZip(zipId))
					{
						alert(ASC.message("fad_findDealers_zipCodeError"));
						return;
					}
					Page.currentZipCode = ASC.getEl(zipId).getValue();
					this.zipCodeValidator.validateZip(zipId);		
					if(zipId != 'zipCode2')
					{
						ASC.getEl('zipCode2').setValue(ASC.getEl(zipId).getValue());
					}

					//for page title,keywords,description
					window.document.title = ASC.message("searchResulttitle");
				}

				
				
			},
			selectedDealerIndex:null
			,
			selectedDealerCode:null
			,
			startLocation:null
			,
			getDirection: function(selectedDealerIndex,dealerCode)
			{
				  this.selectedDealerIndex = this.dealersList.currentDealerIndex;
				  this.selectedDealerCode = dealerCode;
				  this.dealersMap.on("getDirections",this.onGetDirections,Page);
                  this.dealersMap.getDirections(selectedDealerIndex);
                  //for page title
                  window.document.title = ASC.message("getDealertitle");
				  
			}
			,
			direction:null
			,
			sourceAddr : null,
 			onGetDirections:function(options)
 			{
			   if(options.address == "" && options.city == ""&&options.state==""&&options.zip=="")
			   {
				  this.dealersMap.showDirectionsErrorInfo(options.id,1);
				  return;
			   }
			   if(options.zip!=''&&!ASC.util.isZip(options.zip))
			   {
				  this.dealersMap.showDirectionsErrorInfo(options.id,3);
				  return;
			   }
				 
			   if(this.dealersList&&this.dealersList.dealerData[this.selectedDealerIndex] )
			   {
				 this.sourceAddr = options.address+" "+options.city+","+options.state +" "+options.zip;
				 options.distance = this.dealersList.dealerData[this.selectedDealerIndex].distance;
			     this.startLocation = options;	
			     //var m = ASC.getEl('dealerMap');
			     //m.setWidth(560);
			     var dealer = this.dealersList.dealerData[this.selectedDealerIndex];
				  this.direction = new ASC.Chrysler.FAD.DrivingDirection({
					
						map:this.dealersMap.map,
						
						lat:dealer.latitude,
						//lat: 70.496675,

						lng:dealer.longitude,
						//lng:-102.65625,

						original:  options.address+" "+options.city+","+options.state +" "+options.zip,

					    destination:dealer.address1+" "+dealer.city+","+dealer.state + " "+ dealer.zip.substring(0,5),	

					    //original:"New York, NY",
				        
				       // destination:"Chicago, IL",
						
						directionsDesc:'DirectionsDesc'
					});
				    this.direction.clear();
				    this.direction.on("checkSuccess",this.ontestSuccess,Page);
				    this.direction.on("checkError",this.ontestError,Page);
				    this.direction.test();
					if(ASC.Chrysler.Cookies.getPreferredDealer()!=null && ASC.Chrysler.Cookies.getPreferredDealer()!=''){
						ASC.Chrysler.trackPageMetrics('/en/dealer_locator/preferred_dealer/'+dealer.dealerCode+'/directions');				
					}else{
						ASC.Chrysler.trackPageMetrics('/en/dealer_locator/by_zip/'+dealer.dealerCode+'/directions');				
					}				    
			   }
	 		},
	 		ontestSuccess:function()
	 		{
	 		    this.dealersMap.clearAllMarker();
	 			this.direction.on("error",this.handleErrors,Page);
				this.direction.on("success",this.handleSuccess,Page);
				this.direction.getDrivingDirection();
				ASC.getEl('leftArrow').setDisplayed('none');
				ASC.getEl('rightArrow').setDisplayed('none');
				ASC.getEl('pageBar').setDisplayed('none');
				ASC.getEl("showMyPreferredDealer").setDisplayed('none');
		 	},
	 		ontestError:function()
	 		{
	 			this.dealersMap.showDirectionsErrorInfo(this.startLocation.id,2);
	 			this.direction = null;
		 	},
			coordinate:null,
			handleSuccess:function(options)
			{
				var m = ASC.getEl('dealerMap');
				var d = ASC.getEl('directionContainer');
				d.setDisplayed('block');
			    m.setWidth(560);
			    
				this.direction.map.checkResize();
				this.dealersList.renderDirectionDealer(this.selectedDealerIndex);
			},
			
			handleErrors:function(options)
			{  
				ASC.getEl('directionsMap').setDisplayed('none');
			},
			
			backToMapView: function()
			{
				var mlc='/'+this.lang+'/dealer_locator/';
				if(ASC.Chrysler.Cookies.getPreferredDealer() && ASC.Chrysler.Cookies.getPreferredDealer().length>0){
					mlc = mlc + 'preferred_dealer/'+ASC.Chrysler.Cookies.getPreferredDealer();
				}else{
					mlc = mlc + 'by_zip/not_selected'
				}
				ASC.Chrysler.trackPageMetrics(mlc);
				this.direction.clear();
				var m = ASC.getEl('dealerMap');
				var d = ASC.getEl('directionContainer');
				d.setDisplayed('none');
				m.setWidth('100%');
				ASC.getEl("DirectionsDesc").setValue("block");			
				
				this.tempIndexForBackToMapView = this.dealersList.currentDealerIndex;
				this.dealersList.render();

				this.direction.map.checkResize();				
				this.dealersMap.pushDealerPin();
				
				ASC.getEl('rightArrow').setDisplayed('block');
				ASC.getEl('pageBar').setDisplayed('block');
				//for page title,keywords,description
				window.document.title = ASC.message("searchResulttitle");
				this.initShowMyPreferredDealer();				
			},
			printDealerInfo:function(dealerCode,distance)
			{
				window.open(ASC.cfg.getContextPath() + "/fad/printDealerInfo.do?dealerCode="+dealerCode+"&zipDistance="+distance+"&zipCode="+this.currentZipCode);
			},
			toPrintDirections:function()
			{
				var url=ASC.cfg.getContextPath() + "/fad/printDirections.do?dealerCode="+this.selectedDealerCode+
				"&address="+this.startLocation.address+"&city="+this.startLocation.city+
				"&state="+this.startLocation.state+
				"&zipDistance="+this.startLocation.distance+
				"&zipCode="+this.startLocation.zip
				window.open(url);
			},
			printThePage: function()
			{
				if(this.currentZipCode != '')
				{
					var url = ASC.cfg.getContextPath() + '/fad/printFindDealers.do?';
					url = url + 'zipCode=' + this.currentZipCode;
					url = url + '&numResultsPerGroup=' + this.dealersData.pageSize;
					url = url + '&resultsGroupNumber=' + this.dealersData.pageIndex;
					if(this.selectedDealerCode){
						url = url + '&dealerSelected=' + this.selectedDealerCode;
					}
					window.open(url);
				}
				else
				{
					alert(ASC.message("fad_findDealers_zipCodeError"));
				}
			},
			onClickMarker: function(options)
			{
			    this.dealersMap.pinPushed = true;
				this.dealersList.clickDealerInfo(options.xindex, true);
			},
			onClickDealerInfo:function(options)
			{				
				if(options.xindex != options.oldIndex)
				{
					this.dealersMap.showDealerInfo(options.oldIndex);
				}
				this.getDealerInfo({markerId:options.xindex,dealerCode:options.dealer.dealerCode});
				this.setIndexArrow();
				if(typeof options.isFromMap != 'undefined'){
					if(options.isFromMap){
						ASC.Chrysler.trackLinkMetrics('content','map_dealer_info');
					}else{
						ASC.Chrysler.trackLinkMetrics('content','dealer_site_'+options.dealer.dealerCode);
					}
				}
				
				if(typeof options.isFromMap != 'undefined' && options.isFromMap){
					this.selectedDealerCode = options.dealer.dealerCode;
					if(ASC.Chrysler.Cookies.getPreferredDealer()!=null && ASC.Chrysler.Cookies.getPreferredDealer()!=''){
						ASC.Chrysler.trackPageMetrics('/en/dealer_locator/preferred_dealer/'+options.dealer.dealerCode);				
					}else{
						ASC.Chrysler.trackPageMetrics('/en/dealer_locator/by_zip/'+options.dealer.dealerCode);				
					}
				}
			},
			onIndexChanging: function(options)
			{
				this.currentMarkerId = -1;
				this.dealersList.renderPageBar(options.pageIndex,this.dealersData.pageCount);
				this.dealersList.update(options.items);
				this.dealersMap.dealerPageIndex= options.pageIndex;
				this.dealersMap.dealerPageSize = Page.c_pageSize;
				this.dealersMap.setData(options.items);
				this.setIndexArrow();	
				//this.initShowMyPreferredDealer();			
			},
			//can do something after displaying all push pin. 
			onAfterPushPin:function(options)
			{
				//default to show current dealer after backing to map view
				if(this.tempIndexForBackToMapView > -1)
				{
					//this.dealersList.clickDealerInfo(this.tempIndexForBackToMapView);
					this.tempIndexForBackToMapView = -1;
				}
			},			
			currentShowDivId:new Array(),
			currentTabId:new Array,
			showDiv:function(divId,objId,id)
			{
				var cshow = Page.currentShowDivId[id]+"_"+id;
				var nshow = divId+"_"+id;
				ASC.getEl(cshow).setDisplayed('none');
				ASC.getEl(nshow).setDisplayed('block');

				var ctab = Page.currentTabId[id]+"_"+id;
				var ntab = objId+"_"+id;
				ASC.getEl(ctab).dom.className="";
				ASC.getEl(ntab).dom.className="active";
				
				Page.currentTabId[id] = objId;
				Page.currentShowDivId[id]=divId;
			},
			onShowMoreDealerInfo:function(options)
			{
				Page.currentTabId[options.markerId] = "newVehicleTab";
				Page.currentShowDivId[options.markerId]="div_newvehicle";
			},
			onEnterForZip:function(evt,id)
			{
				var isie = (document.all) ? true : false; 
				if(isie) evt = window.event;
				var key;
				key = isie?event.keyCode:evt.which;
				
				if(key==13)
					Page.showAdvancedSearch(false,id);
				else if(String.fromCharCode(key).toLowerCase() =="v")
				{
					if(!window.event&&evt.ctrlKey)
					{
						evt.preventDefault();          
					     evt.stopPropagation();
					}
					else
					{
						window.event.returnValue=false;
					}
				}
		
			},
			stopEvent: function(e) {				
				  if(Ext.isIE) {					  
				    window.event.cancelBubble = true;
				    window.event.returnValue = false;
				  } else {
				    //e.preventDefault();
				    e.stopPropagation();
				  }
			},
			pageArrowClick:function(offSet)
			{
				if(offSet<0)
				{
					if(this.dealersData.pageIndex > 1)
					{						
						this.dealersData.setPageIndex(this.dealersData.pageIndex - 1);						
					}
				}
				else
				{
					if(this.dealersData.pageIndex < this.dealersData.pageCount)
					{
						this.dealersData.setPageIndex(this.dealersData.pageIndex + 1);
					}
				}
				this.setIndexArrow();
			},			
			setIndexArrow:function()
			{
				//ASC.getEl('pageBar').setDisplayed('block');	
				var leftArrow = ASC.getEl("leftArrow");
				var rightArrow = ASC.getEl("rightArrow");
				rightArrow.setDisplayed('block');
				leftArrow.setDisplayed('block');

				if(this.dealersData.pageIndex < 2)
				{
					leftArrow.setDisplayed('none');
				}
				if(this.dealersData.pageIndex >= this.dealersData.pageCount )
				{
					rightArrow.setDisplayed('none');
				}
			},
			newVehicleSelectedType:'',
			/* phase 2
            showEmailWindowWithMessage : function(){
				Page.email.showEmailWindow();

                var sourceAddr = this.sourceAddr;
                var dealer = this.dealersList.dealerData[this.selectedDealerIndex-1];
                var destinationAddr = dealer.address1+" "+dealer.city+","+dealer.state; 
                var msg = "http://maps.google.com/maps?f=d&hl=${lang}&geocode=&saddr="+sourceAddr+"&daddr="+destinationAddr;
				Page.email.setMessage(msg);
	        },
	        */
	        validateRadius: function(e,el){ 
	        	e = e || window.event;
	        	var whichCode = Ext.isIE ? e.keyCode:e.which;
	        	var strCheck = '0123456789';	   
	        	if (whichCode == 13 || whichCode == 8 || whichCode == 0) return true;  // Enter  backspace
	        	key = String.fromCharCode(whichCode);  // Get key value from key code
	        	if (strCheck.indexOf(key) == -1)
	        		return false;  // Not a valid key	  
	        	if(el.value.length == 0 &&  key * 1 == 0)  // the first character should not be zero
	        		return false;
	        	return true;
	        },
	        
	        applyForCredit: function(dealerCode){
	        	Page.links.openApplyForCreditWindow(dealerCode, this.brand);
	        },
	        clearAll:function()
	        {
	        	var themeForm = this.theme+'Form';//,'radiusForm'
	        	var inputs = document.getElementsByTagName("input");;
	        	if(inputs && inputs.length)
	        	{
	        		var len = inputs.length;
	        		for(var i=0;i<len;i++)
	        		{
	        			var el = inputs[i];
	        			if(el.getAttribute("clearable")&&el.getAttribute("clearable")=='true')
	        			{
	        				if(el.type=="checkbox")
	        				{
	        				 el.checked = false;
	        				}
	        				continue;
	        			}
	        			switch(el.id)
	        			{
	        				case 'search_zipCode':
	        				case 'search_city':
	        				case 'search_dealerName':
	        					el.value='';
	        					break;
	        				case 'search_zipDistance':
	        					el.value='50';
	        			}
	        			
	        		}
	        	}
	        	var sel = ASC.getEl('search_state');
	        	sel.setValue('');
	        	ASC.getEl("error_cityState").setDisplayed('none');
				ASC.getEl("error_dealerName").setDisplayed('none');
				ASC.getEl("error_services").setDisplayed('none');
				ASC.getEl('error_zipCode').setDisplayed('none');
				ASC.getEl('error_combination').setDisplayed('none');
	        },
	        
	        displayEditAS: function(display){
	        	if(display){
	        		this.isAdvancedSearchEdit = true;
	        	}else{
	        		this.isAdvancedSearchEdit = false;
	        	}
	        }
		});

	
		ASC.onReady(Page.init, Page);