var map = '';
var stores = '';
var mapProcessing = false;
var homeIcon = '/assets/img/googleMap/Normal-Home-icon.png';
var home = '';
var showSearchResultLabel = true;
var xd = 0;

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().trim();
	var city = $('input#city').val().trim();
	var state = $('select#state').val().trim();
	var radius = $('select#radius').val().trim();
	$('span.error-text').remove();
	$('.hlerror').removeClass().addClass('input-text');
	
	if(!(zipcode.length + (city.length + state.length))) {
		$('input[name="zipcode"]').addClass('hlerror');
		$('#content').prepend(' <span class="error-text">Please enter your location search criteria to continue!</span>');
		mapProcessing = false;
		$('div.spinner-loader').hide();
		$(obj).fadeTo('fast',1);
		return;
	}

	if(city.length && (zipcode.length != 5)) zipcode = '';
	if(zipcode.length && (zipcode.length != 5)) {
		$('input[name="zipcode"]').addClass('hlerror');
		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/Ajax/FormsAjax.cfc?method=getStoreLocation',
		success: function(data,textStatus,httpRequest) {
			stores = ((data.STORES == 'undefined') || (typeof(data.STORES) == 'undefined')) ? 0 : data.STORES;
			var home = data.HOME;

		// ClearSaleing
			Broadway.csOrderNum = tagStruct.orderId;
			Broadway.csOrderType = 'Store Locator';
			Broadway.csCity = home[0].CITY;
			Broadway.csState = home[0].STATE;
			Broadway.csPostalCode = home[0].ZIPCODE;
//			Broadway.executeLocatorCS();
		// ************

			initGoogleMap();

			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);

			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*300) });
				} 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*20) });
				}

				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/StoreLocator/index.js',obj:result});
		}
	});
}

$(document).ready(function() {
	if(tagStruct.zipcode.trim().length) {
		$('input#zipcode').val(tagStruct.zipcode.trim());
	}

	initGoogleMap();
	if(tagStruct.loadIt == 'true') {
		$('input#city').val('');
		$('input#state').val('');
		$('button#submitButton').click();
	}
});
