var map = '';
var stores = '';
var mapProcessing = false;
var homeIcon = '/assets/googleMap/Normal-Home-icon.png';
var home = '';
//var image = '/assets/googleMap/blue-dot.png';
var xd = 0;

var showSearchResultLabel = true;

function panToStore(i) {
	for(x=0; x < stores.length; x++) stores[x].marker.infoWindow.close();
	var latlng = new google.maps.LatLng(parseFloat(stores[i].LATITUDE_FLOAT), parseFloat(stores[i].LONGITUDE_FLOAT));
	map.panTo(latlng);
	stores[i].marker.infoWindow.open(map,stores[i].marker);
}

function setUpLocatorResults(params) {
	var i, index = 0, items = [], itemsTemp, prev, next, prevClone, nextClone;
	
	function update() {
		var i, s;

		for(i = 0; i < items.length; i++) {
			s = $(items[i]).style;
			if ((i >= index) && (i < index + params.visible)) {
				$(items[i]).css('position','relative');
				$(items[i]).css('top','0');
				$(items[i]).css('left','0');
				$(items[i]).css('visibility','visible');
			} else {
				$(items[i]).css('position','absolute');
				$(items[i]).css('top','-1000');
				$(items[i]).css('left','-1000');
				$(items[i]).css('visibility','hidden');
			}
		}

		if(index === 0) {
			$(prev).css('visibility','hidden');
			$(prevClone).css('visibility','hidden');
		} else {
			$(prev).css('visibility','visible');
			$(prevClone).css('visibility','visible');
		}

		if(index + params.visible >= items.length) {
			$(next).css('visibility','hidden');
			$(nextClone).css('visibility','hidden');
		} else {
			$(next).css('visibility','visible');
			$(nextClone).css('visibility','visible');
		}
	}
	
	itemsTemp = $('#' + params.container).find('li');
	for (i=0; i < itemsTemp.length; i++) items[i] = itemsTemp[i];
	
	prev = $('#' + params.prev);
	next = $('#' + params.next);
	prevClone = $(prev).clone();
	nextClone = $(next).clone();
	
	$(prev).find('a').click(function() { index -= params.visible; update(); });
	$(prevClone).find('a').click(function() { index -= params.visible; update(); });

	$(next).find('a').click(function() { index += params.visible; update(); });
	$(nextClone).find('a').click(function() { index += params.visible; update(); });

	clone = $('#' + params.clone);
	$(clone).append(prevClone);
	$(clone).append(nextClone);

	update();
}

function initGoogleMap() {
	if(typeof(google) == 'undefined') return;
	var latlng = new google.maps.LatLng(37.0625,-95.677068); // default to center of US
	var zoom = 3; // default the zoom as well

	if(typeof(StoreLocator) == 'object') { var latlng = new google.maps.LatLng(parseFloat(StoreLocator.Latitude),parseFloat(StoreLocator.Longitude)); var zoom = 12; }
	var myOptions = { zoom:zoom, center:latlng, mapTypeId:google.maps.MapTypeId.ROADMAP };
	map = new google.maps.Map($('#map_canvas')[0], myOptions);
}

$(document).ready(function() {
	$('button#submitButton').click(function(eventData) {
		//Broadway.showSpinner(this,-35,-3);
		if(mapProcessing) return;
		locateStores(this);
	});
});


function locateStores(obj) {
	if(mapProcessing) return;
	mapProcessing = true;

	stores = 0;
	
	var zipcode = $('input#zipcode').val();
	var city = $('input#city').val();
	var state = $('select#state').val();
	var radius = $('select#radius').val();

	if(!(zipcode.length + (city.length + state.length))) {
		$('#notifications').html('Please enter your location search criteria to continue!');
		$('#notifications').slideDown('fast');
		$('#notifications').animate({marginLeft: 0}, 3000, function () { $('#notifications').slideUp('fast'); });
		mapProcessing = false;
		//$('div.spinner-loader').hide();
		$(obj).fadeTo('fast',1);
		return;
	}

	if(city.length && (zipcode.length != 5)) zipcode = '';
	if(zipcode.length && (zipcode.length != 5)) {
		$('#notifications').html('Zipcode must be exactly 5 digits! Please try again.');
		$('#notifications').slideDown('fast');
		$('#notifications').animate({marginLeft: 0}, 3000, function () { $('#notifications').slideUp('fast'); });
		mapProcessing = false;
		//$('div.spinner-loader').hide();
		$(obj).fadeTo('fast',1);
		return;
	}

	$('storeList').innerHTML = '';
	$('#store-locator-results-pager-top').html('');
	$('#store-locator-results-pager-bottom').html('');

	for(var i=0; i < stores.length; i++) stores[i].marker.setMap(null);
	var msg = '... searching ...<br /> <br />';
	msg += (zipcode.length ? ('zipcode: ' + zipcode) : (city + ', ' + state));
	msg += '<br />Radius: ' + radius + 'mi.';
	$('#storeList ol').html(msg);

	$.ajax({
		type:'post',
		cache:false,
		dataType:'json',
		data:{ zipcode:zipcode, city:city, state:state, radius:radius },
		url:'/com/System.cfc?method=getStoreLocation',
		success: function(data,textStatus,httpRequest) {
			initGoogleMap();
			stores = ((data.STORES == 'undefined') || (typeof(data.STORES) == 'undefined')) ? 0 : data.STORES;
			home = data.HOME;
		
			var bounds = new google.maps.LatLngBounds();
			var links = '';
		
			links += '<div id="store-locator-results-prev"><a href="javascript:;">&larr; prev</a></div>';
			links += '<div id="store-locator-results-next"><a href="javascript:;">next &rarr;</a></div>';
			$('#store-locator-results-pager-bottom').append(links);
			if(showSearchResultLabel) {
				$('#storeList').prepend('<h2>Search Results</h2>');
				showSearchResultLabel = false;
			}
			$('#storeList ol').html('');
			$('#storeList h5').html('');
		
		//	home[0].icon = homeIcon;
		//	home[0].LatLng = new google.maps.LatLng(home[0].latitude, home[0].longitude);
		//	home[0].marker = new google.maps.Marker({ position:home[0].LatLng, map:map, icon:home[0].icon, zIndex:-1 });
		//	bounds.extend(home[0].LatLng);
//		var newMark = new google.maps.MarkerImage(image);
			for(var i=0; i < stores.length; i++) {
				stores[i].LATITUDE_FLOAT = parseFloat(stores[i].LATITUDE_FLOAT);
        stores[i].LONGITUDE_FLOAT = parseFloat(stores[i].LONGITUDE_FLOAT);
        stores[i].DIST = parseFloat(stores[i].DIST);
        stores[i].GROUPTYPE = parseInt(stores[i].GROUPTYPE);
					if(stores[i].GROUPTYPE == 1) var pin = 'http://chart.apis.google.com/chart?chst=d_map_spin&chld=.6|0|6FABF0|12|b|' + (i+1);
          if(stores[i].GROUPTYPE == 2 && stores[i].STORETYPE != 'S') var pin = 'http://chart.apis.google.com/chart?chst=d_map_spin&chld=.6|0|EB6767|12|b|' + (i+1);
          if(stores[i].GROUPTYPE == 2 && stores[i].STORETYPE == 'S') var pin = 'http://chart.apis.google.com/chart?chst=d_map_spin&chld=.6|0|5AC876|12|b|' + (i+1);

				var store = '<li style="background: url(' + pin + ') left top no-repeat;padding-left:30px; padding-top:-5px;"><div id="store' + i + '">';
					store += '<div class="store-locator-results-address">';
					store += '<h3><a href="javascript:panToStore(' + i + ');">' + stores[i].ENTITY_NAME + '</a></h3>';
					store += stores[i].ADDRESS + '<br />';
					store += stores[i].CITY + ', ' + stores[i].STATE + ' &nbsp; ' + stores[i].ZIPCODE + '<br />';
					store += stores[i].STORE_PHONE1;
					store += '</div>';
					if(stores[i].LOCATORLABEL != ''){
					store += '<div id="store-locator-results-label">';
					store += stores[i].LOCATORLABEL + '<br />'; 
					store += '</div>';
					}
					store += '<div class="store-locator-results-links">';
					store += '<a href="javascript:panToStore(' + i + ');">show on map</a><br />';
		//			store += '<a href="javascript:panToStore(' + i + ');">show on map</a> | <a href="">get directions</a><br />';
					if(stores[i].GROUPTYPE == 1){
					store += '<a href="http://www.oreckstore.com/' + stores[i].VPATH.toLowerCase() + '/" target="_blank">view store website</a> ~' + stores[i].DIST.toFixed(1) + ' mi. </div>';
					}	else	{
					store += '~' + stores[i].DIST.toFixed(1) + ' mi. </div>';	
					}
					store += '</div></li>';
				$('#storeList ol').append(store);
				
				xd = stores.length - i;
				
				stores[i].LatLng = new google.maps.LatLng(parseFloat(stores[i].LATITUDE_FLOAT), parseFloat(stores[i].LONGITUDE_FLOAT));
				bounds.extend(stores[i].LatLng);
			
				//numbered markers			
				if(stores[i].GROUPTYPE == 1){
					var image = 'http://chart.apis.google.com/chart?chst=d_map_spin&chld=.7|0|6FABF0|12|b|' + (i +1);
					var newMark = new google.maps.MarkerImage(image);
					stores[i].marker = new google.maps.Marker({ position:stores[i].LatLng, map:map, icon:newMark, zIndex:xd });
				} else if(stores[i].GROUPTYPE == 2 && stores[i].STORETYPE != 'S'){
					var image = 'http://chart.apis.google.com/chart?chst=d_map_spin&chld=.6|0|EB6767|12|b|' + (i +1);
					var newMark = new google.maps.MarkerImage(image);
					stores[i].marker = new google.maps.Marker({ position:stores[i].LatLng, map:map, icon:newMark, zIndex:xd });
				} else if(stores[i].GROUPTYPE == 2 && stores[i].STORETYPE == 'S'){
					var image = 'http://chart.apis.google.com/chart?chst=d_map_spin&chld=.6|0|5AC876|12|b|' + (i +1);
					var newMark = new google.maps.MarkerImage(image);
					stores[i].marker = new google.maps.Marker({ position:stores[i].LatLng, map:map, icon:newMark, zIndex:xd });
				}
				
				stores[i].marker.infoWindow = new google.maps.InfoWindow({ content:document.getElementById('store'+i).innerHTML });
				google.maps.event.addListener(stores[i].marker, 'click', function() { for(i=0; i < stores.length; i++) stores[i].marker.infoWindow.close(); this.infoWindow.open(this.map,this); });
			}
			if(!stores.length) $('#storeList h5').html('[ no results ]');
		
			if(stores.length > 1) {
				map.fitBounds(bounds);
			} else if(stores.length == 1) {
				var latlng = new google.maps.LatLng(parseFloat(home[0].LATITUDE), parseFloat(home[0].LONGITUDE));
				map.setZoom(10);
				map.panTo(latlng);
			} else {
				var latlng = new google.maps.LatLng(37.0625,-95.677068); // default to center of US
				map.setZoom(3);
				map.panTo(latlng);
			}
		
			setUpLocatorResults({
				container:'store-locator-results',
				prev:'store-locator-results-prev',
				next:'store-locator-results-next',
				clone:'store-locator-results-pager-top',
				visible:3
			});

		//	$('div.spinner-loader').hide();
			$(obj).fadeTo('fast',1);
			mapProcessing = false;
		},
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			//$('div.spinner-loader').hide();
			$(obj).fadeTo('fast',1);
			mapProcessing = false;
			$('#notifications').html('<span class="alert">Something wasn\'t quite right. Please check your location information and try again.');
			$('#notifications').slideDown('fast');
			$('#notifications').animate({marginLeft: 0}, 3000, function () { $('#notifications').slideUp('fast'); });
			var result = { XMLHttpRequest:XMLHttpRequest, textStatus:textStatus, errorThrown:errorThrown };
			//Broadway.error.send({subject:'Ajax UI Error',msg:'- Ajax UI error in /Views/Checkout/index.js : validateCheckout',obj:result});
		}
	});
}

function locateStores_response(obj) {
	//Broadway.clearProcessing();

	initGoogleMap();
	stores = ((obj.stores == 'undefined') || (typeof(obj.stores) == 'undefined')) ? 0 : obj.stores;
	home = obj.home;
	var xd = 0;
	var bounds = new google.maps.LatLngBounds();
	var links = '';

	links += '<div id="store-locator-results-prev"><a href="javascript:;">&larr; prev</a></div>';
	links += '<div id="store-locator-results-next"><a href="javascript:;">next &rarr;</a></div>';
	$('#store-locator-results-pager-bottom').append(links);
	if(showSearchResultLabel) {
		$('#storeList').prepend('<h2>Search Results</h2><div class="clear"></div>');
		showSearchResultLabel = false;
	}
	$('#storeList ol').html('');
	$('#storeList h5').html('');

//	home[0].icon = homeIcon;
//	home[0].LatLng = new google.maps.LatLng(home[0].latitude, home[0].longitude);
//	home[0].marker = new google.maps.Marker({ position:home[0].LatLng, map:map, icon:home[0].icon, zIndex:-1 });
//	bounds.extend(home[0].LatLng);
var newMark = new google.maps.MarkerImage(image);
	for(var i=0; i < stores.length; i++) {
		var store = '<li><div id="store' + i + '">';
			store += '<div class="store-locator-results-address">';
			store += '<h3><a href="javascript:panToStore(' + i + ');">' + stores[i].ENTITY_NAME + '</a></h3>';
			store += stores[i].ADDRESS + '<br />';
			store += stores[i].CITY + ', ' + stores[i].STATE + ' &nbsp; ' + stores[i].ZIPCODE + '<br />';
			store += stores[i].STORE_PHONE1;
			store += '</div>';
			store += '<div id="store-locator-results-label">';
			store += stores[i].LOCATORLABEL + '<br />'; 
			store += '</div>';
			store += '<div class="store-locator-results-links">';
			store += '<a href="javascript:panToStore(' + i + ');">show on map</a><br />';
//			store += '<a href="javascript:panToStore(' + i + ');">show on map</a> | <a href="">get directions</a><br />';
			store += '<a href="http://www.oreckstore.com/' + stores[i].VPATH.toLowerCase() + '/" target="_blank">view store website</a> ~' + stores[i].DIST.toFixed(1) + ' mi. </div>';
			store += '</div></li>';
		$('#storeList ol').append(store);

		xd = stores.length - i;
			
		stores[i].LatLng = new google.maps.LatLng(stores[i].latitude_float, stores[i].longitude_float);
		bounds.extend(stores[i].LatLng);
		if(stores[i].GROUPTYPE == 1){
			stores[i].marker = new google.maps.Marker({ position:stores[i].LatLng, map:map, icon:newMark, zIndex:xd });
		} else {
    	stores[i].marker = new google.maps.Marker({ position:stores[i].LatLng, map:map, zIndex:xd });
		}
		stores[i].marker.infoWindow = new google.maps.InfoWindow({ content:document.getElementById('store'+i).innerHTML });
		google.maps.event.addListener(stores[i].marker, 'click', function() { for(i=0; i < stores.length; i++) stores[i].marker.infoWindow.close(); this.infoWindow.open(this.map,this); });
	}
	if(!stores.length) $('#storeList h5').html('[ no results ]');

	if(stores.length > 1) {
		map.fitBounds(bounds);
	} else if(stores.length == 1) {
		var latlng = new google.maps.LatLng(home[0].latitude, home[0].longitude);
		map.setZoom(10);
		map.panTo(latlng);
	} else {
		var latlng = new google.maps.LatLng(37.0625,-95.677068); // default to center of US
		map.setZoom(3);
		map.panTo(latlng);
	}

	setUpLocatorResults({
		container:'store-locator-results',
		prev:'store-locator-results-prev',
		next:'store-locator-results-next',
		clone:'store-locator-results-pager-top',
		visible:3
	});

	//Broadway.processing = false;
	mapProcessing = false;
}

$(document).ready(function(){ initGoogleMap(); });
