ASC.apply(Page, {
	callListView:function(isClickByUser){
		if(isClickByUser){
			var mlc = '/en/dealer_locator/';
			if(this.viewType == "list")
				mlc+= 'list_view';
			ASC.Chrysler.trackPageMetrics(mlc);	
			ASC.Chrysler.trackLinkMetrics('content','select_list_view');
		}
		this.viewType = "list";
		if( ASC.getEl("DirectionsDesc") )
			ASC.getEl("DirectionsDesc").setValue("");
		if( ASC.getEl("search_error"))
			ASC.getEl("search_error").setDisplayed("none");
		ASC.getEl("listViewComp").setDisplayed("block");
		ASC.getEl("mapViewComp").setDisplayed("none");	
		ASC.getEl("defaultMapViewComp").setDisplayed("none");
		ASC.getEl("directionComp").setDisplayed("none");
		ASC.getEl("link_listView1").dom.className="link_listView_active";
		ASC.getEl("link_mapView1").dom.className="link_mapView_dft";
		
		ASC.getEl("listViewHeader").dom.className = "header_view_title_1";
		ASC.getEl("mapViewHeader").dom.className = "header_view_title_2";
		var len = this.dealersList.dealers.length;
		this.dealerHoursWidget = new ASC.Chrysler.dealerHours({});
		this.dealerHoursWidget.dealerInfo = new Object();
		this.pageCount = parseInt((len-1)/4)+1;
		this.setPaginationDescription();
		var tempDealerList = this.goViewPage();
	    this.listView = new ASC.Chrysler.FAD.ListView(tempDealerList,{renderTo:"listView"});
	},
	clearErrorMsg:function()
	{
		if(ASC.getEl("errorMsg_zipCode"))
			ASC.getEl("errorMsg_zipCode").setValue('&nbsp;');
		if(ASC.getEl("errorMsg_city"))
			ASC.getEl("errorMsg_city").setValue('&nbsp;');
		if(ASC.getEl("errorMsg_dealerName"))
			ASC.getEl("errorMsg_dealerName").setValue('&nbsp;');
	},
	isEmpty:function(o){
		for( i in o )
			return false;
		return true;
	},
	noRecordErrMsg:function(){
		
		switch(this.searchType){
			case'zip':
				var param = ASC.util.formToObject('byzipForm');
				if( this.isEmpty(param) )
					ASC.getEl("errorMsg_zipCode").setValue(ASC.message("fad_findDealers_zipCode_nofound"));
				else
					ASC.getEl("errorMsg_zipCode").setValue(ASC.message("fad_findDealers_dealerName_nofound"));
				break;
			case 'city/state':
				var param = ASC.util.formToObject('bycityForm');
				if( this.isValidCityState == 'N')
					ASC.getEl("errorMsg_city").setValue(ASC.message("fad_findDealers_cityState_nofound"));
				else{
					if( this.isEmpty(param) ){
						ASC.getEl("errorMsg_city").setValue(ASC.message("fad_findDealers_zipCode_nofound"));
					}
					else
						ASC.getEl("errorMsg_city").setValue(ASC.message("fad_findDealers_dealerName_nofound"));
				}
				break;
			default:
				var param = ASC.util.formToObject('byDealerNameForm');
				if( this.isEmpty(param) )
					ASC.getEl("errorMsg_dealerName").setValue(ASC.message("fad_findDealers_dealerName_nofound_revise"));
				else
					ASC.getEl("errorMsg_dealerName").setValue(ASC.message("fad_findDealers_dealerName_nofound"));
		}
		
	},
	clickInStoreServices:function(e,name)
	{
		if(e.checked){
			ASC.Chrysler.trackLinkMetrics('content_filter','add_filter_'+name);			
		}else{
			ASC.Chrysler.trackLinkMetrics('content_filter','remove_filter_'+name);	
		}
	},	
	
	searchDealerListByZip:function()
	{
		this.trackSearchEvent();
		//ASC.getEl("searchBtn_zip").dom.className = "searchBtn_active";
		var zipEl = ASC.getEl("sZipCode");
		var errorEl = ASC.getEl("errorMsg_zipCode");
		this.isAZ = false;
		this.displayOnly4Dealers = false;
		if(!zipEl.getValue())
		{
			errorEl.setValue(ASC.message("fad_findDealers_nozipcode"));
		}
		else
		{
			this.currentZipCode = zipEl.getValue();
			this.searchType   = "zip";
			this.zipCodeValidator.validateZip('sZipCode');
		}
	
	},
	searchDealerListByCity:function()
	{
		this.trackSearchEvent();
		//ASC.getEl("searchBtn_cs").dom.className = "searchBtn_active";
		var cityEl = ASC.getEl("bycity");
		var stateEl = ASC.getEl("bystates");
		var errorEl = ASC.getEl("errorMsg_city");
		this.isAZ = false;
		this.displayOnly4Dealers = false;
		var city =  cityEl.getValue();
		var isValidCity = this.isValidStr(city);
		if(!isValidCity&&!stateEl.getValue())
		{
			errorEl.setValue(ASC.message("fad_findDealers_noCityState"));
			return;
		}
		if(isValidCity &&!stateEl.getValue())
		{
			errorEl.setValue(ASC.message("fad_findDealers_noState"));
			return;
		}
		if(!isValidCity &&stateEl.getValue())
		{
			errorEl.setValue(ASC.message("fad_findDealers_noCity"));
			return;
		}
		var options = {city:cityEl.getValue(),state:stateEl.getValue()};
		this.searchType="city/state";
		this.getLocateDealers(['bycityForm'], options);
	},
	isValidStr:function(str){
		if( str ){
			str=str.replace(/(^\s*)|(\s*$)/g, "");
			return str.length>0;
		}
		return false;
	},
	searchDealerListByDealerName:function()
	{
		this.trackSearchEvent();
		this.dealerNameZipCode = "";
		//ASC.getEl("searchBtn_dealer").dom.className = "searchBtn_active";
		this.chooseDealerPageIndex=1;
		this.getLocateDealersConditions = null;
		this.isAZ = false;
		this.displayOnly4Dealers = false;
		this.continueToDo = false;
		var dealerEl = ASC.getEl("sDealerName");
		var errorEl  = ASC.getEl("errorMsg_dealerName");
		var dealer =  dealerEl.getValue();
		var isValidDealer = this.isValidStr(dealer);
		
		if(!isValidDealer)
		{
			errorEl.setValue(ASC.message("fad_findDealers_noDealerName"));
			return;
		}
		this.searchType = "dealerName";
		var options = {dealerName:dealerEl.getValue()}
		this.getLocateDealersConditions = {forms:['byDealerNameForm'],params:options}
		this.chooseDealerAjaxRequest();
		
	},
	
	showOnly4Dealers:function(dealersList)
	{
		this.dealersList = dealersList;
		var tempArray = new Array();
		var len = dealersList.dealers.length;
		if(!this.isAZ)
		{
			//Find itself first and then find next three closest dealers
			for( i=0; i<len; i++ ){
				if(dealersList.dealers[i].dealerCode == this.dealerNameDealer.dealerCode)
				{
					tempArray.push(dealersList.dealers[i]);
					break;
				}
			}
			for( i=0; i<len; i++ ){
				if(tempArray.length >=4)
					break;
				if(dealersList.dealers[i].dealerCode != this.dealerNameDealer.dealerCode)
				{
					tempArray.push(dealersList.dealers[i]);
				}
			}
			this.dealersList.dealers = tempArray;
			this.dealers = tempArray;
		}
		if(this.viewType == "list")
			this.callListView();
		if( this.viewType == "map")
			this.callMapView();
		
	},
	selectOneDealer_dealerName:function(dealersList)
	{
		 this.dealersInPop = dealersList;
		 var events = {
					dealerSelected: {
						fn: function (dealerCode) {
			 				Page.continueToDo = true;
							Page.locateDealer(dealerCode);
						}
					}								
				};
		 var total = parseInt(dealersList.totalDealerCount);
		 var pageCount = total % this.chooseDealrPageSize == 0 ? total/this.chooseDealrPageSize:parseInt(total/this.chooseDealrPageSize)+1;
	
		    var preWindow = this.chooseDealerWindow;
			this.chooseDealerWindow = new ASC.Chrysler.FAD.ChooseDealer(dealersList.dealers,{pageIndex:this.chooseDealerPageIndex,pageCount:pageCount});
			this.chooseDealerWindow.on(events);
			this.chooseDealerWindow.show();
			if(preWindow)
			{
				preWindow.close();
			}
		 
	},	
	
	reloadListView:function(dealersList){
		this.dealersList = dealersList;
		this.pageIndex = 1;
		var len = this.dealersList.dealers.length;
		this.pageCount = parseInt((len-1)/4)+1;
		this.setPaginationDescription();
		this.listView.update(this.goViewPage());
	},
	getDealerInfoFromList:function(dealerCode){
		var dealersMap = Page.mc.dealersMap;
		var dealer;
		if( this.dealers ){
			for( var i=0;i<this.dealers.length;i++){
				dealer = this.dealers[i];
				if( dealer.dealerCode == dealerCode){
					break;
				}
			}
		}
		if(dealersMap ){
			var markerId = dealersMap.getMarkerIdByDealerCode(dealerCode);
			var options = {};
			options.markerId = markerId;
			options.dealerCode = dealerCode;
			options.fromList = true;
			options.dealerInfo = {};
			options.dealerInfo.dealer = dealer;
			this.getDealerInfo(options);
		}
	},
	getDealerInfo: function(options)
	{
		ASC.Chrysler.trackPageMetrics('/en/dealer_locator/map_view/card');	
		if( options.fromList )
			ASC.Chrysler.trackLinkMetrics('content','open_dealer_card_from_list _'+options.dealerCode);
		else
			ASC.Chrysler.trackLinkMetrics('content','open_dealer_card_from_map _'+options.dealerCode);
		this.currentMarkerId = options.markerId;
		var dealerInfo = options.dealerInfo;
		if( ! dealerInfo ){
			dealerInfo = {};
			dealerInfo.dealer = this.dealerListSection[this.currentMarkerId];
		}
		this.dealersMap.showDealerCard(this.currentMarkerId,dealerInfo);
		/*
		var cache = this.dealersCache.get(options.dealerCode);
		if(!cache)
		{
			this.ajax.sendRequest('DEALERINFOAJAX', {
				params: {
					dealerCode: options.dealerCode
				}
			});
		}
		else
		{
			this.dealersMap.showDealerCard(this.currentMarkerId, cache.data);
		}*/
	},
	getDealerInfoCallback: function (response, ioArgs)
	{
		this.dealersCache.add({key: response.data.dealer.dealerCode, data: response.data, ioArgs: ioArgs});
		this.dealersMap.showDealerCard(Page.currentMarkerId,response.data);
	},
	stopEvent: function(e) {				
		  if(Ext.isIE) {					  
			    window.event.cancelBubble = true;
			    window.event.returnValue = false;
			  } else {
			    //e.preventDefault();
			    e.stopPropagation();
			  }
	},
	adjustButtonCss:function(dealerCode,type){
		for( var i=0;i<this.dealers.length;i++){
			var dealer = this.dealers[i];
			var dealerID = dealer.dealerCode
			if( dealerID == dealerCode ){
				switch(type){
					case 'WEB':
						//ASC.getEl("map_"+dealerID).dom.className = "view_button_active";
						this.map_id = "map_"+dealerID;
						break;
					case 'DIR_WEB':
						//ASC.getEl("direction_map_"+dealerID).dom.className = "view_button_active";
						this.direction_map_id = "direction_map_"+dealerID;
						break;
					case 'CARD_WEB':
						//ASC.getEl("card_web_"+dealerID).dom.className = "card_viewDealerSite_active";
						break;
					case 'SNI':
						//ASC.getEl("card_sni_"+dealerID).dom.className = "searchInventory_active";
						break;
					case 'PRE':
						//ASC.getEl("card_pre_"+dealerID).dom.className = "searchPreOwned_active";
						break;
					default:
						//ASC.getEl("list_"+dealerID).dom.className = "view_button_active";
						this.list_id = "list_"+dealerID;
				}
			}
			else{
				
				if( ASC.getEl("map_"+dealerID) )
					ASC.getEl("map_"+dealerID).dom.className = "view_button";;
			
				if( ASC.getEl("list_"+dealerID) )
					ASC.getEl("list_"+dealerID).dom.className = "view_button";
				
			}
		}
	},
	trackDealerWebsite:function(dealerCode,type){
		this.adjustButtonCss(dealerCode,type);
		ASC.Chrysler.trackLinkMetrics('content','visit_dealer_website_'+dealerCode);
	},
	trackCardDealerWebsite:function(dealerCode,type){
		this.adjustButtonCss(dealerCode,type);
		ASC.Chrysler.trackLinkMetrics('card_content','card_visit_dealer_website_'+dealerCode);
	},
	trackInventory:function(dealerCode,type){
		this.adjustButtonCss(dealerCode,type);
		ASC.Chrysler.trackLinkMetrics('card_content','card_search_new_inventory');
	},
	trackPreOwned:function(dealerCode,type){
		this.adjustButtonCss(dealerCode,type);
		ASC.Chrysler.trackLinkMetrics('card_content','card_search_preowned_inventory');
	},
	setPreferredDealer: function(dealerCode, preferredDealerCode){
		if( dealerCode ){
			ASC.Chrysler.trackPageMetrics('/en/dealer_locator/preferred_dealer/'+dealerCode);
		}else{
			ASC.Chrysler.trackPageMetrics('/en/dealer_locator/by_zip/'+preferredDealerCode);
		}
		this.initPreferredDealer(dealerCode,preferredDealerCode);
	},
	initPreferredDealer:function(dealerCode, preferredDealerCode){
		var preferredDealerEl = ASC.getEl("setPreferredDealer"+dealerCode);
		var dealerCode1 = dealerCode;
		if(!preferredDealerEl){
			preferredDealerEl = ASC.getEl("setPreferredDealer"+preferredDealerCode);
			dealerCode1 = preferredDealerCode;
		}
		if( preferredDealerEl ){
			if(!dealerCode){
				ASC.getEl("setPreferredDealer"+dealerCode1).setDisplayed('block');
				ASC.getEl("changeOrclearPreferredDealer"+dealerCode1).setDisplayed('none');
			}else{
				ASC.getEl("setPreferredDealer"+dealerCode1).setDisplayed('none');
				ASC.getEl("changeOrclearPreferredDealer"+dealerCode1).setDisplayed('block');			
			}	
		}	
	}
});

