window.onunload = function(){
	GUnload()
};

var myGlobalHandlers = {
	onCreate: function(){
		//Loader.on()
	},

	onComplete: function() {
		if(Ajax.activeRequestCount == 0){
			//Loader.off()
		}
	},
	
	onError: function(e,f){
		storeLocator.msg({dataString:f})
		//Loader.off()
	},
	
	onException: function(e,f){
		storeLocator.msg({dataString:f})
		//Loader.off()	
	}
};

Ajax.Responders.register(myGlobalHandlers);

var Loader = {
	on: function(){
/*
		if(!$('loader')){
			var loader = $E('div',document.body,{id:'loader'})
		}else{
			var loader = $('loader')
		}
*/
/* start bmac */
		if (!$('loader')){$E('div',document.body,{id:'loader'});}
		var loader = $('loader');

		loader.style.visibility = 'hidden'

	var loaderObj = {
		show: function(e){
			loader.style.left = Event.pointerX(e) + 13 + 'px'
			loader.style.top = Event.pointerY(e) + 13 + 'px'
			if(loader.style.visibility != 'visible'){loader.style.visibility = 'visible'}
		}
	};

	loaderObj.show = loaderObj.show.bindAsEventListener(loaderObj);

	Event.observe( document.body, 'mousemove', loaderObj.show );

/* end bmac */

/*	original
		Event.observe(document.body,'mousemove',function(e){
			loader.style.left = Event.pointerX(e)  + 13 + 'px'
			loader.style.top = Event.pointerY(e)  + 13 + 'px'
			if(loader.style.visibility != 'visible')loader.style.visibility = 'visible'
		},false);
*/
	},
	
	off: function(){
		document.body.removeChild($('loader'))
		Event.stopObserving( document.body, 'mousemove', loaderObj.show ); /* bmac */
	}
};


var storeLocator = {
	
	//page scope variables
	vars: {
		map: false,
		marker: false,
		currentPageVar: false,
		stores: [],
		totalPages: false,
		storeHeight: 168,
		storesPerPage: 3,
		pageMultiplier: 50,
		minZoomLevel: 7,
		maxZoomLevel: 17,
		geo: true
	},
	
	services: {
		store: '/storeLocServ'
	},
	
	//base parameters
	pars: {
		address: false,
		operation:'radiusSearch',
		lat:false,
		lon:false,
		radius:false,
		token:'ACE',
		fbd:[]
	},
	
	//recent request caches
	cache: {
		geo: {count:50,recs:[{call:false,response:{lat:false,lon:false}}]},
		store: {count:10,recs:[{call:false,response:false}]}
	},
	
	stopReturn: function(event){
		if(Event.keyCode(event) == Event.KEY_RETURN){
			storeLocator.updateMap()
			return false
		}
	},
	
	resetPage: function(obj){
		//clear bubble
		storeLocator.map.bubble.hide()
		
		//clear points
		storeLocator.map.clearMarkers(storeLocator.vars.map,storeLocator.vars.stores)
		
		storeLocator.vars.currentPageVar = 1
		storeLocator.vars.totalPages = Math.ceil(parseInt(obj.COUNT)/3)
		if(storeLocator.vars.totalPages > 34)storeLocator.vars.totalPages = 34;
		if(obj.COUNT == 0)storeLocator.vars.totalPages = 1
	},
	
	//message handling
	msg: function(para){
		
		$('fldAddress').onkeypress = function(){
			return false
		}
		
		var box = document.createElement('div')
		box.className = 'errorBox'
		box.id = 'box'
			
		var box1 = document.createElement('div')
		box1.className = 'pR'
		box1.id = 'box1'
		
		var closeIt = document.createElement('div')
		closeIt.className = "closeIt"
		
		box1.appendChild(closeIt)
		
		if(para.dataString){
			var content = document.createElement('span')
			content.innerHTML = para.dataString
			box1.appendChild(content)
		}
		
		if(para.dataElement){
			box1.appendChild(para.dataElement)
		}
		
		box.appendChild(Wizzle.box({dataElement:box1, className:'box8'}))
		
		Wizzle.lightBox({dataElement:box,minWidth:'align',minHeight:'align',closeClass:'closeIt',onClose:function(){
			if(Global.ie){
				$('fldAddress').onkeypress = function(){
					if(Event.keyCode(event) == Event.KEY_RETURN){
						storeLocator.updateMap()
						return false
					}
				}
			}else{
				$('fldAddress').onkeypress = function(event){
					if(Event.keyCode(event) == Event.KEY_RETURN){
						storeLocator.updateMap()
						return false
					}
				}
			}
																													  
		}});
	},
	
	toggleFiltersPane: function(){
		//	alert('f');
		if($('searchFilters').offsetHeight>52){
			$('searchBottom').className = 'searchBottom'
			Size.shrink($('searchFilters'),{minHeight:52, minWidth:'same', skip:15, pause:20})
		}else{
			$('searchBottom').className = 'searchBottom2'
			Size.grow($('searchFilters'),{maxWidth:'same', skip:15, pause:20})
		}
	},
	
	isGeoLoco: function(lat,lon){
		if(lat && lon){
			//set pars
			storeLocator.pars.lat = lat
			storeLocator.pars.lon = lon
			//go to cascade
			storeLocator.updateMap()
		}else{
			storeLocator.vars.geo = false
			$('defaultCopy').style.display = "block"
			$('defaultImg').style.display = "block"
		} 
	},
	
	//START OF MAP UPDATE CASCADE
	updateMap: function(){
		if(GBrowserIsCompatible()) {
			
			//populate global pars object
			//filters
			/*storeLocator.pars.fbd = []
			for(var i=0; i<document.frm.fbd.length; i++){
				if(document.frm.fbd[i].checked){
					storeLocator.pars.fbd.push(document.frm.fbd[i].value)
				}
			}
			storeLocator.pars.fbs = []
			for(var i=0; i<document.frm.fbs.length; i++){
				if(document.frm.fbs[i].checked){
					storeLocator.pars.fbs.push(document.frm.fbs[i].value)
				}
			}
			storeLocator.pars.fbp = []
			for(var i=0; i<document.frm.fbp.length; i++){
				if(document.frm.fbp[i].checked){
					storeLocator.pars.fbp.push(document.frm.fbp[i].value)
				}
			}*/
			//radius
			storeLocator.pars.radius = document.getElementById('fldRadius').value
			
			//address
			if(storeLocator.vars.geo && $('fldAddress').value.trim()==''){
				storeLocator.pars.address = ' '
				storeLocator.setLocation()
			}else{
				storeLocator.vars.geo = false
				storeLocator.pars.address = $('fldAddress').value.trim()
			}
			
			//validation
			if(!storeLocator.pars.address){
				storeLocator.msg({dataString:'Please enter an address that our system can search for.'})
				return false
			}
			else if (storeLocator.pars.address == '00000'){
				storeLocator.msg({dataString:'The zip code entered is not recognized. Please try again.'})
				return false
			}
			
			if(storeLocator.vars.geo) return storeLocator.setLocation()
			
			//scan cache
			var cached = storeLocator.cache.geo.recs.detect(function(v,i){
				if(storeLocator.pars.address == v.call){
					//update lat and lng
					storeLocator.pars.lat = v.response.lat
					storeLocator.pars.lon = v.response.lon
					return true
				}
			});
			
			if(cached){
				storeLocator.setLocation()
			}else{
				storeLocator.getLocation()
			}
		}
	},
	
	getLocation: function(){
		var geocoder = new GClientGeocoder();
		geocoder.getLatLng(storeLocator.pars.address,function(point){
			
			//validation
			if(point == null){
				storeLocator.msg({dataString:'We\'re having trouble locating this address. Try one of the following search tips: <ul style="padding-left:20px;"><li>Double-check the spelling or try varying the spelling of your location.</li><li>Make sure you have the correct City, State or ZIP code associated with your location.</li><li>Make sure you use one of the following formats for searching:<br /> -Street Address, City, State<br /> -City, State<br /> -ZIP Code</li></ul>'})
				return false
			}else{
				//load results in cache
				storeLocator.cache.geo.recs.unshift({call:storeLocator.pars.address,response:{lat:point.lat(),lon:point.lng()}})
				//check size of cache and remove if nessessary
				if(storeLocator.cache.geo.recs.length>storeLocator.cache.geo.count)storeLocator.cache.geo.recs.pop()
				
				//set new points
				storeLocator.pars.lat = point.lat()
				storeLocator.pars.lon = point.lng()

				//store the new points
				var today = new Date();
 				var expire = new Date();
 				expire.setTime(today.getTime() + 3600000*2);
 				document.cookie = "stLocLat="+escape(storeLocator.pars.lat) + ";expires="+expire.toGMTString();
 				document.cookie = "stLocLon="+escape(storeLocator.pars.lon) + ";expires="+expire.toGMTString();
				
				//set new location on map
				storeLocator.setLocation()
			}
		});
	},
	
	setLocation: function(){
		//get the new center point
		var point = new GLatLng(storeLocator.pars.lat,storeLocator.pars.lon)
		
		//pan to center of address
		if(storeLocator.vars.map){
			storeLocator.vars.map.panTo(point)
		}else{
			$('defaultImg').style.display = 'none';
			$('map').style.display = 'block';
			$('defaultCopy').style.display = 'none'
			$('resultListHolder').style.display = 'block'
			storeLocator.vars.map = new GMap2($('map'));
			storeLocator.map.setup(storeLocator.vars.map,point)
		}
		
		if(storeLocator.vars.geo) return storeLocator.getStores()
		
		//create or move marker to address 
		if(storeLocator.vars.marker){
			storeLocator.vars.marker.setPoint(point)
		}else{
			//attach marker to map
			storeLocator.vars.marker = new GMarker(point, storeLocator.map.icon.me());
			storeLocator.vars.map.addOverlay(storeLocator.vars.marker);
		}
		
		//add clickable address
		GEvent.addListener(storeLocator.vars.marker, "click", function() {
			storeLocator.vars.marker.openInfoWindowHtml(storeLocator.map.bubble.me())
			setTimeout(storeLocator.map.bubble.show,10)
			storeLocator.list.goDim()
		});
		
		//go get the stores
		storeLocator.getStores()
	},
	
	getStores: function(){	
		var paraObj = {}
		Object.extendExcept(paraObj,storeLocator.pars,['address','fbd','fbs','fbp'])
		
		var pars = Transform.toQueryString(paraObj);
		
		if(storeLocator.pars.fbd.length>0){
			storeLocator.pars.fbd.each(function(v,i){
				pars = pars + '&fbd=' + v							
			});
		}
		if(storeLocator.pars.fbs.length>0){
			storeLocator.pars.fbs.each(function(v,i){
				pars = pars + '&fbs=' + v							
			});
		}
		if(storeLocator.pars.fbp.length>0){
			storeLocator.pars.fbp.each(function(v,i){
				pars = pars + '&fbp=' + v							
			});
		}
		
		//scan cache
		var cached = storeLocator.cache.store.recs.detect(function(v,i){
			if(pars == v.call){
				return v
			}
		});
		
		if(cached){
			showList(cached.response)
		}else{
			storeLocator.locatorService(storeLocator.services.store,pars,showList)
		}
	},
	
	locatorService: function(url,pars,callBack){
		var myAjax = new Ajax.Request(url, { 
			method: 'get', 
			parameters: encodeURI(pars), 
			onComplete: callBack
		});
	}
	
	//END OF MAP UPDATE CASCADE
	
}

storeLocator.map = {
	setup: function(map,point) {
		//get map container
		var obj = map.getContainer()
		
		//add pan control
		//up
		$E('div',obj,{className:'control panUp',onclick:function(){
			map.panDirection(0,+1)
		}});
		//down
		$E('div',obj,{className:'control panDown',onclick:function(){
			map.panDirection(0,-1)
		}});
		//left
		$E('div',obj,{className:'control panLeft',onclick:function(){
			map.panDirection(+1,0)
		}});
		//right
		$E('div',obj,{className:'control  panRight',onclick:function(){
			map.panDirection(-1,0)
		}});
		
		//add zoom control
		//in
		$E('div',obj,{id:'zoomIn',className:'control zoomIn',onclick:function(){
			storeLocator.map.zoom(map,+1)
		}});
		//out
		$E('div',obj,{id:'zoomOut',className:'control zoomOut',onclick:function(){
			storeLocator.map.zoom(map,-1)
		}});
		
		//add map type
		//map
		$E('div',obj,{id:'cmap',className:'control2 cmap',onclick:function(){
			storeLocator.map.mapType(map,0)
		}});
		//sat
		$E('div',obj,{id:'csat',className:'control2 csat',onclick:function(){
			storeLocator.map.mapType(map,1)
		}});
		//hybrid
		$E('div',obj,{id:'chybrid',className:'control2 chybrid',onclick:function(){
			storeLocator.map.mapType(map,2)
		}});
		
		map.setCenter(point, 10);
		//add map controller
		//map.addControl(new GOverviewMapControl(new GSize(100,100)));
		//get rid of bubble shadow
		map.getPane(G_MAP_FLOAT_SHADOW_PANE).style.display = 'none'
		//hide google default bubble
		map.getPane(G_MAP_FLOAT_PANE).style.visibility = 'hidden'
		
		//adjust map type
		storeLocator.map.adjustMapButtons(storeLocator.vars.map)
		
		//GEvent.addListener(map, "dragend", function() {
		//	var point = map.getCenter();
		//	//set new points
		//	storeLocator.pars.lat = point.lat()
		//	storeLocator.pars.lon = point.lng()
		//	storeLocator.setLocation()
		//});
		
	},
	
	clearMarkers: function(map,stores){
		if(stores.length>0)while(stores.length>0)map.removeOverlay(stores.shift());
	},
	
	adjustToMarkers: function(map,cords){
		var n = cords.x.max() + .01
		var e = cords.y.max() + .01
		var s = cords.x.min() - .01
		var w = cords.y.min() - .01
		
		var sw = new GLatLng(s,w)
		var ne = new GLatLng(n,e)
		
		var bounds = new GLatLngBounds(sw,ne)
		var propZoom = map.getBoundsZoomLevel(bounds)
		
		if(propZoom>storeLocator.vars.maxZoomLevel){
			map.setZoom(storeLocator.vars.maxZoomLevel)
		}else if(propZoom<storeLocator.vars.minZoomLevel){
			map.setZoom(storeLocator.vars.minZoomLevel)
		}else{
			map.setZoom(propZoom)
		}
		
		storeLocator.map.adjustZoomButtons(storeLocator.vars.map)
		map.panTo(bounds.getCenter())
	},
	
	zoom: function(map,dir){
		if(dir>0){
			if(storeLocator.vars.maxZoomLevel>(parseInt(map.getZoom())))map.zoomIn()
		}else if(dir<0){
			if(storeLocator.vars.minZoomLevel<(parseInt(map.getZoom())))map.zoomOut()
		}
		storeLocator.map.adjustZoomButtons(map)
	},
	
	adjustZoomButtons: function(map){
		Element.removeClassName('zoomOut','zoomOutOff')
		Element.removeClassName('zoomIn','zoomInOff')
		
		if(storeLocator.vars.minZoomLevel>(parseInt(map.getZoom())-1)){
			Element.addClassName('zoomOut','zoomOutOff')
		}
		else if(storeLocator.vars.maxZoomLevel<(parseInt(map.getZoom())+1)){
			Element.addClassName('zoomIn','zoomInOff')
		}
	},
	
	mapType: function(map,i){
		map.setMapType(G_DEFAULT_MAP_TYPES[i])
		storeLocator.map.adjustMapButtons(map)
		
	},
	
	adjustMapButtons: function(map){
		Element.removeClassName('cmap','cmapOn')
		Element.removeClassName('csat','csatOn')
		Element.removeClassName('chybrid','chybridOn')
		
		var type = map.getCurrentMapType().getName()
		if(type == 'Map'){
			Element.addClassName('cmap','cmapOn')
		}else if(type == 'Satellite'){
			Element.addClassName('csat','csatOn')
		}else if(type == 'Hybrid'){
			Element.addClassName('chybrid','chybridOn')
		}
	}
}

storeLocator.map.icon = {
	me: function(){
		var icon = new GIcon();
		icon.image = "../images/WIZ_ACE_myStore/markerMe.png";
		icon.shadow = "";
		icon.iconSize = new GSize(26, 40);
		icon.shadowSize = new GSize(0, 0);
		icon.iconAnchor = new GPoint(13, 40);
		icon.infoWindowAnchor = new GPoint(257, 110);
		return icon
	},
	
	store: function(){
		var icon = new GIcon();
		icon.image = "../images/WIZ_ACE_myStore/markerStore.png";
		icon.shadow = "";
		icon.iconSize = new GSize(30, 28);
		icon.shadowSize = new GSize(0, 0);
		icon.iconAnchor = new GPoint(15, 28);
		icon.infoWindowAnchor = new GPoint(264, 102);
		return icon
	}
}

storeLocator.map.bubble = {
	me: function(){
		//create bubble content
		var node = document.createElement('div')
		
		$E('div',node,{className:"googleHack1"});
		
		var bubble = document.createElement('div')
		bubble.className = 'mapBubble'
		
		$E('div',bubble,{className:"closeIt",onclick:function(){
			storeLocator.map.bubble.hide()
			storeLocator.list.goDim()
		}});
		
		var content = document.createElement('div')
		content.className = 'meBubbleContent'
		
		//address
		$E('div',content,{className:"storeName",html:storeLocator.pars.address});
		
		bubble.appendChild(content)
		
		var hack2 = document.createElement('div')
		hack2.className = "ieHackForLinks"
		hack2.appendChild(bubble)
		
		node.appendChild(hack2)
		
		return node
	},
	
	hide: function(){
		storeLocator.vars.map.getPane(G_MAP_FLOAT_PANE).style.display = 'none'
	},
	
	show: function(){
		storeLocator.vars.map.getPane(G_MAP_FLOAT_PANE).style.display = 'block'
	}
	
}

storeLocator.list = {
	pan: function(page){
		var top = page*(storeLocator.vars.storeHeight*-storeLocator.vars.storesPerPage)
		var elm = $('recSlider')
		var current = parseInt(elm.style.top)
		var skip = parseInt(Math.abs(top-current)/(storeLocator.vars.storeHeight*storeLocator.vars.storesPerPage))
		var update = false
		if(top>current){
			if(page>=0){
				Scroll.up($('recSlider'),{point:top,skip:(storeLocator.vars.pageMultiplier*skip),pause:50,timerVar:'slider'})
				update = true
			}else{
				$('backBtn').className = 'off'
				$('backBtn2').className = 'off'
			}
		}else if(top<current){
			if(page<storeLocator.vars.totalPages){
				Scroll.down($('recSlider'),{point:top,skip:(storeLocator.vars.pageMultiplier*skip),pause:50,timerVar:'slider'})
				update = true
			}
		}
		if(update){
			storeLocator.vars.currentPageVar = page + 1
			$('currentPage').innerHTML = storeLocator.vars.currentPageVar
			$('nextBtn').className = ''
			$('nextBtn2').className = ''
			$('backBtn').className = ''
			$('backBtn2').className = ''
			if(storeLocator.vars.currentPageVar==storeLocator.vars.totalPages){
				$('nextBtn').className = 'off'
				$('nextBtn2').className = 'off'
			}
			else if(storeLocator.vars.currentPageVar==1){
				$('backBtn').className = 'off'
				$('backBtn2').className = 'off'
			}
		}
	
	},
	
	hightLight: function(obj){
		storeLocator.list.goDim()
		
		obj = $(obj)
		Element.addClassName(obj,'on')
	},
	
	goDim: function(){
		var ary = $C('rec','ResultList')
		ary.each(function(v,i){
			Element.removeClassName(v,'on')
		});
	}
}

storeLocator.val = {
	hours: function(start,end){
		if(start && end){
            if (start < 2500 && end < 2500){
                return start.toStdTime() + ' to ' + end.toStdTime()
            }else{
                return 'Contact store'
            }
		}else{
			return 'Closed'
		}	
	}
}











function jsonFixer(string){
	string = string.replace(/,,/g,",")
	string = string.replace(/\[,/g,"[")
	string = string.replace(/,]/g,"]")
	string = string.replace(/,}/g,"}")
	string = string.replace(/{,/g,"{")
	string = string.replace(/:,/g,':"",')
	string = string.replace(/":}/g, '":""}')
	return string
}

	


function showList(originalRequest){
	//alert(originalRequest.responseText)
	
	//is the data from the service or the cache
	if(originalRequest.responseText){
		try {
		var obj = originalRequest.responseText.exe()
		}
		catch (e) {
			var obj = jsonFixer(originalRequest.responseText).exe()
		}
		//load results in cache
		storeLocator.cache.store.recs.unshift({call:this.parameters,response:obj})
		//check size of cache and remove if nessessary
		if(storeLocator.cache.store.recs.length>storeLocator.cache.store.count)storeLocator.cache.store.recs.pop()
	}else{
		var obj = originalRequest
	}
	
	//reset current page vars
	storeLocator.resetPage(obj)
	
	//set cords arrays
	var cords = {
		y:[storeLocator.pars.lon],
		x:[storeLocator.pars.lat]
	}
	
	//number header
	var count = document.createElement('div')
	count.appendChild(parseInt(obj.COUNT).Imagizer('num'))
	var temp = 1
	if(obj.COUNT == 1)temp = 2
	$E('div',count,{id:'storeLabel' + temp});
	$('ResultNumberHeader').replaceChild(count,$('ResultNumberHeader').firstChild)
	
	var container = document.createElement('div')
	
	//record navigation
	var nav = document.createElement('div')
	nav.className = "nav"
	
	//back button
	$E('div',nav,{id:'backBtn',className:"off",onclick:function(){
		storeLocator.list.pan(storeLocator.vars.currentPageVar - 2)
	}});
	
	//next button
	var nextBtn = document.createElement('div')
	nextBtn.id = 'nextBtn'
	if(obj.COUNT<4)nextBtn.className = 'off'
	nextBtn.onclick = function(){
		storeLocator.list.pan(storeLocator.vars.currentPageVar)
	}
	nav.appendChild(nextBtn)
	
	container.appendChild(nav)
	
	//record set
	var recHolder = document.createElement('div')
	recHolder.className = "recHolder"
	var recSlider = document.createElement('div')
	recSlider.id = 'recSlider'
	recSlider.style.top = '0px'
	
	//the stores location icon
	var icon = storeLocator.map.icon.store()
	if(obj.RESULTS.length>0){
		obj.RESULTS.each(function(v,i){
		if (v.store) {
		
			if (storeLocator.pars.address != " ")	
				var directionURL = 'http://maps.google.com/maps?saddr='+storeLocator.pars.lat+','+storeLocator.pars.lon+'('+encodeURI(storeLocator.pars.address)+')&daddr='+v.store.latitude+','+v.store.longitude+'('+encodeURI(v.store.address1+' '+v.store.city+', '+v.store.stateCode+' '+v.store.postalCode)+')'
			else
				var directionURL = 'http://maps.google.com/maps?q='+v.store.latitude+','+v.store.longitude+'('+encodeURI(v.store.address1+' '+v.store.city+', '+v.store.stateCode+' '+v.store.postalCode)+')'
			var detailsURL = 'storeDetail.jsp?store='+v.store.locationCode+'&saddr='+storeLocator.pars.lat+','+storeLocator.pars.lon+'('+encodeURI(storeLocator.pars.address)+')&daddr='+v.store.latitude+','+v.store.longitude+'('+encodeURI(v.store.address1+' '+v.store.city+', '+v.store.stateCode+' '+v.store.postalCode)+')'
			
			//each store
			var rec = document.createElement('div')
			rec.id = 'storeList'+i
			rec.className = 'rec'
			if(i==0)rec.className = 'rec first'
			
			var recH = document.createElement('div')
			recH.className = 'recH'
			
			//store Name
			$E('a',recH,{className:"storeName",html:v.store.locationName,href:detailsURL})
			//miles
			if(!storeLocator.vars.geo) $E('div',recH,{className:"miles",html:v['distance'].round(1) + ' miles'})
			//address
			$E('div',recH,{className:"address",html:v.store.address1+'<br />'+v.store.city+', '+v.store.stateCode+ ' ' +v.store.postalCode})
			//phone number
			if (v.store.phoneNumber && v.store.phoneNumber.length == 10){
				$E('div',recH,{className:"phoneNumber",html:v.store.phoneNumber.substring(0,3)+'.'+v.store.phoneNumber.substring(3,6)+'.'+v.store.phoneNumber.substring(6,10)})
			}else{
				$E('div',recH,{className:"phoneNumber",html:v.store.phoneNumber})
			}

			//BEGIN map stuff
			//create and add store to map
			var point = new GLatLng(v.store.latitude,v.store.longitude)
			var marker = new GMarker(point,icon)
			storeLocator.vars.map.addOverlay(marker);
			
			//add store to stores array
			storeLocator.vars.stores.push(marker)
			
			//create bubble content
			var hack = document.createElement('div')
			hack.className = 'googleHack1'
			
			var bubble = document.createElement('div')
			bubble.page = Math.floor(i/3)
			bubble.className = 'mapBubble'
			
			//tab 1
			var tab1 = document.createElement('div')
			tab1.className = 'tab1'
			
			//tab2 link
			var toTab2 = document.createElement('div')
			toTab2.className = 'toTab2'
			toTab2.onclick = function(){
				tab1.style.display = 'none'
				tab2.style.display = 'block'
				
				Global.currentWindowTab = this.parentNode.nextSibling
				
				if(!$C('detail',Global.currentWindowTab).length){
					
					//open loader
					var loader = $C('loader2',Global.currentWindowTab)[0]
					loader.style.display= 'block'
					Opacity.plus(loader,{maxO:.75,timerVar:'loader2'});
					
					var pars = "heavy=true&token=ACE&operation=storeData&storeID="+v.store.locationCode+"&showOnly=hours"
					
					storeLocator.locatorService(storeLocator.services.store,pars,function(response){
						try {
							var obj = response.responseText.exe().hours
						} catch (e) {
            				var obj = jsonFixer(originalRequest.responseText).exe().hours
        				}
						
						var detail = document.createElement('div')
						detail.className = 'detail'
					
						if(!(obj.openingTimeMon==obj.closingTimeMon==obj.openingTimeTue==obj.closingTimeTue==obj.openingTimeWed==obj.closingTimeWed==obj.openingTimeThu==obj.closingTimeThu==obj.openingTimeFri==obj.closingTimeFri==obj.openingTimeSat==obj.closingTimeSat==obj.openingTimeSun==obj.closingTimeSun))	{
						//monday
						$E('div',detail,{className:'hoursCol1',html:'Monday:'})
						$E('div',detail,{className:'hoursCol2',html:storeLocator.val.hours(obj.openingTimeMon,obj.closingTimeMon)})
						//tuesday
						$E('div',detail,{className:'hoursCol1',html:'Tuesday:'})
						$E('div',detail,{className:'hoursCol2',html:storeLocator.val.hours(obj.openingTimeTue,obj.closingTimeTue)})
						//wednesday
						$E('div',detail,{className:'hoursCol1',html:'Wednesday:'})
						$E('div',detail,{className:'hoursCol2',html:storeLocator.val.hours(obj.openingTimeWed,obj.closingTimeWed)})
						//thursday
						$E('div',detail,{className:'hoursCol1',html:'Thursday:'})
						$E('div',detail,{className:'hoursCol2',html:storeLocator.val.hours(obj.openingTimeThu,obj.closingTimeThu)})
						//friday
						$E('div',detail,{className:'hoursCol1',html:'Friday:'})
						$E('div',detail,{className:'hoursCol2',html:storeLocator.val.hours(obj.openingTimeFri,obj.closingTimeFri)})
						//saturday
						$E('div',detail,{className:'hoursCol1',html:'Saturday:'})
						$E('div',detail,{className:'hoursCol2',html:storeLocator.val.hours(obj.openingTimeSat,obj.closingTimeSat)})
						//sunday
						$E('div',detail,{className:'hoursCol1',html:'Sunday:'})
						$E('div',detail,{className:'hoursCol2',html:storeLocator.val.hours(obj.openingTimeSun,obj.closingTimeSun)})
						}else{
						$E('div',detail,{className:'hoursCol2',html:'Contact your local Ace for store hours'})
						}
						
						Global.currentWindowTab.appendChild(detail)
						
						//close loader
						var loader22 = $C('loader2',Global.currentWindowTab)[0]
						Opacity.minus(loader22,{timerVar:'loader2',onComplete:function(){
							$C('loader2',Global.currentWindowTab)[0].style.display= 'none'
						}});
					});
				}
				
			}
			
			//store info
			var detail = document.createElement('div')
			detail.className = 'detail'
			
			//store Name
			$E('a',detail,{className:"storeName",html:v.store.locationName,href:detailsURL})
			//address
			$E('div',detail,{className:"address",html:v.store.address1+'<br />'+v.store.city+', '+v.store.stateCode+ ' ' +v.store.postalCode})
			//phone number
			if (v.store.phoneNumber && v.store.phoneNumber.length == 10){
				$E('div',detail,{className:"phoneNumber",html:v.store.phoneNumber.substring(0,3)+'.'+v.store.phoneNumber.substring(3,6)+'.'+v.store.phoneNumber.substring(6,10)})
			}else{
				$E('div',detail,{className:"phoneNumber",html:v.store.phoneNumber})
			}
			
			//links
			var links = document.createElement('div')
			links.className = "tab1Links"
			if (directionURL)	
				links.innerHTML = '<a class="details" href="'+detailsURL+'">See Details</a><a class="directions" href="'+directionURL+'" target="_blank">Get Directions</a>'
			else
				links.innerHTML = '<a class="details" href="'+detailsURL+'">See Details</a>'
			
			tab1.appendChild(detail)
			tab1.appendChild(links)
			tab1.appendChild(toTab2)
			bubble.appendChild(tab1)
			
			//tab 2
			var tab2 = document.createElement('div')
			tab2.className = 'tab2'
			
			var loader = document.createElement('div')
			loader.className='loader2'
			if(Global.ie){
				loader.style.filter = "alpha(opacity=0)"
			}else{
				loader.style.opacity = 0
			}
			loader.innerHTML = '<img src="../images/WIZ_ACE_myStore/processingLarge.gif" />'
			tab2.appendChild(loader)
			
			//tab1 link
			var toTab1 = document.createElement('div')
			toTab1.className = 'toTab1'
			toTab1.onclick = function(){
				tab2.style.display = 'none'
				tab1.style.display = 'block'
			}
			
			tab2.appendChild(toTab1)
			bubble.appendChild(tab2)
			
			//close btn
			var closeIt = document.createElement('div')
			closeIt.className = "closeIt"
			closeIt.onclick = function(){
				storeLocator.map.bubble.hide()
				storeLocator.list.goDim()
			}
			bubble.appendChild(closeIt)
			
			var bubbleNode = document.createElement('div')
			bubbleNode.appendChild(hack)
			
			
			var hack2 = document.createElement('div')
			hack2.className = "ieHackForLinks"
			hack2.appendChild(bubble)
			
			bubbleNode.appendChild(hack2)
			
			
			//add bubble to marker
			GEvent.addListener(marker, "click", function() {
				
				marker.openInfoWindowHtml(bubbleNode);
				setTimeout(storeLocator.map.bubble.show,10)
				
				//scroll list
				storeLocator.list.pan(bubble.page)
				//hightLight the store on the list
				storeLocator.list.hightLight(rec.id)
			});
			
			//add points to area array
			cords.y.push(point.lng())
			cords.x.push(point.lat())
			//END map stuff
			
			//map link
			var node = document.createElement('div')
			node.className = "mapLink"
			var a = document.createElement('a')
			a.href = 'javascript:void(0)'
			a.onclick = function(){
				marker.openInfoWindowHtml(bubbleNode);
				setTimeout(storeLocator.map.bubble.show,10)
				storeLocator.list.hightLight(rec.id)
			}
			a.appendChild(document.createTextNode('Show on map'))
			node.appendChild(a)
			recH.appendChild(node)
			
			//driving directions
			if (directionURL)
				$E('div',recH,{className:"drivingLink",html:'<a href="'+directionURL+'" target="_blank">Get driving directions</a>'})
			
			//add to rec
			rec.appendChild(recH)
			recSlider.appendChild(rec)
			
		} });
	}else{
		recSlider.innerHTML='<div style="padding:15px 13px;">You have the following options:<ul style="padding-left:13px;"><li>Try searching again at a greater Distance from your location.</li><li>Shop online at acehardware.com</li><li>Get shopping assistance by calling our Customer Service Department at 1-866-290-5334.</li></ul></div>'
	}
	if(obj.COUNT>100){
		var rec = document.createElement('div')
        rec.id = 'storeList101'
        rec.className = 'rec'
		rec.innerHTML='We\'re sorry; this list shows a maximum of 100 stores.'
		recSlider.appendChild(rec)
	}
	
	//adjust zoom level and recenter
	storeLocator.map.adjustToMarkers(storeLocator.vars.map,cords)
	
	recHolder.appendChild(recSlider)
	container.appendChild(recHolder)
	
	
	
	
	
	
	
	//record navigation
	var nav = document.createElement('div')
	nav.className = "nav2"
	
	//back button
	$E('div',nav,{id:'backBtn2',className:"off",onclick:function(){
		storeLocator.list.pan(storeLocator.vars.currentPageVar - 2)
	}});
	
	//next button
	var nextBtn = document.createElement('div')
	nextBtn.id = 'nextBtn2'
	if(obj.COUNT<4)nextBtn.className = 'off'
	nextBtn.onclick = function(){
		storeLocator.list.pan(storeLocator.vars.currentPageVar)
	}
	nav.appendChild(nextBtn)
	
	container.appendChild(nav)
	
	
	
	
	
	
	
	//status bar
	var status = document.createElement('div')
	status.className = "status"
	status.appendChild(document.createTextNode('Showing Page '))
	
	//current page
	$E('span',status,{id:"currentPage",html:storeLocator.vars.currentPageVar})
	
	status.appendChild(document.createTextNode(' of '))
	
	//total pages
	$E('span',status,{className:"drivingLink",html:storeLocator.vars.totalPages})
	
	container.appendChild(status)
	$('ResultList').replaceChild(container,$('ResultList').firstChild)
}


