var ErrorsOn=0;
var MAX_RESULTS=26;
var rb = new Resource({
	CONFIG_LIST:['store_locator'],
	LIMIT:['not_compatible','need_more_criteria','no_criteria','search_error','no_results','email_required','first_name_required','zip_required','optin_error']
	});
				
document.observe('dom:loaded', function () {
//	NAV_ID = NAV_ID || getQueryParamValue("navId");
//	var so = new SWFObject("/media/flash/events/clinique-events.swf", "clinique-events", "963", "392", "9.0.45", "#FFFFFF");
//	so.addVariable("assetsDomain", "/media/flash/events/");		
//	so.addVariable("siteData", "xml/events.xml");
//	so.addParam("scale", "noscale");
//	so.addParam("wmode", "transparent");
//	so.write("events_flash_content");
//	so.addVariable("navId", NAV_ID);
	init_LocatorMap();
	Event.observe(document.body, 'click', hideError, true);
	});
	
function init_LocatorMap(){
	Event.observe('search-locator-button', 'click', showLocatorMap, true);
	Event.observe('driving-button', 'click', showDirectionsMap, true);
	Event.observe('sign-up-button', 'click', doOptIn, true);
	}

function slFormHandler(){
	return false;
	}

function fieldChange(field,thing){
	$(field).value=thing;
	console.log("IE hack: " + field + "=" + thing);
	}
	
function doOptIn(){
	if($F('EMAIL') == ""){showOptError(rb.keys.get('email_required'));}
	else if($F('FIRST_NAME') == ""){showOptError(rb.keys.get('first_name_required'));}
	else if($F('POSTAL') == ""){showOptError(rb.keys.get('zip_required'));}
	else{
		$('opt-loading').show();
		$('signup-form').hide();
		var params = [{
			"EMAIL_ADDRESS" : $F('EMAIL'),
			"FIRST_NAME" : $F('FIRST_NAME'),
			"ZIP" : $F('POSTAL'),
			"OPTIN_EVENTS_ONLY" : "yes"
			}];
              var storenode = $('signup-form');
		var id = jsonrpc.fetch(
			'email.signup', 
			params,
			{ 	onSuccess: function () {
					console.log('Opt In successful');
					$('opt-loading').hide();
					$('signup-confirm').show();
                                   storenode.fire("StoreLocator:submitted"); 
					},
				onFailure: function () {
					$('signup-form').show();
					$('opt-loading').hide();
					$('signup-confirm').hide();
					console.log('Store Locator JSON failed to load ');
					showOptError(rb.keys.get('optin_error'));
					}
				}
			);
		}
	}

function loadDirectionsWindow(lat,lon,address,city,state,zip){
	var duo = /<br>/g;
	var fulladdress=address;
	if(duo.exec(address)){
		var two = new Array(); 
		two = address.split('<br>');
		address=two[1];
		}
	$('LAT').value=lat;
	$('LON').value=lon;
	$('DESTINATION_ADDRESS').value=address;
	$('DESTINATION_CITY').value=city;
	$('DESTINATION_STATE').value=state;
	$('DESTINATION_ZIP').value=zip;
	var address_display = fulladdress + '<br>' + city + ', ' + state + ' ' + zip;
	$('show_address').update(address_display);
	$('route').hide();
	$('fc-search').hide();
	$('driving-directions').show();
	}

function showDirectionsMap(){
	if($F('ORIGIN_ADDRESS') != "" && $F('ORIGIN_CITY') != "" && $F('ORIGIN_STATE') != ""){
		var lat = $F('LAT');
		var lon = $F('LON');
		var address = $F('ORIGIN_ADDRESS');
		var city = $F('ORIGIN_CITY');
		var state = $F('ORIGIN_STATE');
		var address2 = $F('DESTINATION_ADDRESS');
		var city2 = $F('DESTINATION_CITY');
		var state2 = $F('DESTINATION_STATE');
		var zip2 = $F('DESTINATION_ZIP');
		if (GBrowserIsCompatible()) {
			$('route').update('');
			$('show_map').hide();
			$('driving-directions').hide();
			$('signup-form').hide();
			$('opt-loading').hide();
			$('signup-confirm').hide();
			
			$('show_driving_map').show();
			$('route').show();
			var dmap = new GMap2($('driving_map'));
			dmap.setCenter(new GLatLng(lat,lon), 15);
			dmap.addControl(new GSmallMapControl());
			dmap.addControl(new GMapTypeControl());
			var directionsPanel = $('route');
			var directions = new GDirections(dmap, directionsPanel);
			directions.load("from: " + address + ", " + city + ", " + state + " to: " + address2 + ", " + city2 + ", " + state2 + " " + zip2);
			}
		else {alert(rb.keys.get('not_compatible'));}
		}
	else{showError(rb.keys.get('no_criteria'));}
	}

function returntoMap(){
	$('show_driving_map').hide();
	$('route').hide();
	$('show_map').show();
	$('fc-search').show();
	}

function returntoSearch(){
	$('driving-directions').hide();
	$('events-results').hide();
	$('special-events').show();
	$('fc-search').show();
	}
	
function showLocatorMap(){
	if($F('ZIP') != "" || ($F('CITY') != "" && $F('STATE') != "")){
		$('show_map').hide();
		$('show_driving_map').hide();
		$('signup-confirm').hide();
		$('signup-form').hide();
		$('opt-loading').show();
		$('locator_messages').hide();
		var params = [{
			"ARGS" : {
				"ZIP" : $F('ZIP'),
				"CITY" : $F('CITY'),
				"STATE" : $F('STATE'),
				"DOORNAME" : $F('DOORNAME'),
				"PERIMITER" : $F('PERIMITER')
				}
			}];

		var id = jsonrpc.fetch(
			'storelocator.results', 
			params,
			{ 	onSuccess: showit,
				onFailure: function () {
					console.log('Store Locator JSON failed to load ');
					showError(rb.keys.get('search_error'));
					}
				}
			);
		}
	else if ($F('ZIP') == "" && $F('CITY') == "" && $F('STATE') == ""){showError(rb.keys.get('no_criteria'));}
	else{showError(rb.keys.get('need_more_criteria'));}
	}
	
function showit(id) {
	var response = id.responseText.evalJSON()[0];
	var data = $H(response.result);
	var gotstores = data.get('count');
	console.log("count: ", gotstores);
	var error = response.error;
	console.log("error: ", error);
	var goog = data.get('goog');
	console.log("goog: ", goog);
	var query = data.get('query');
	console.log("query: ", query);
//	var events = data.get('rb');
//	console.log("rb: ", events);
	var c_lat = data.get('latitude');
	var c_lon = data.get('longitude');
	console.log("ground zero: " + c_lat + "," + c_lon);
	var doors = data.get('doors');
	if(error){
		$('opt-loading').hide();
		$('signup-form').show();
		showError(error);
		}
	else if(gotstores){
		$('show_map').show();
		$('show_driving_map').hide();
	//	$('feature-text').hide();
		$('signup-form').hide();
		$('opt-loading').hide();
		$('signup-confirm').hide();
	//	$('fc-search').className="fc-col-2";
		$('feature-content').setStyle({'height':'450px'});
		$('search-feature-content').setStyle({'height':'415px'});
		$('special-events').hide();
		$('events-loading').show();
	
		if (GBrowserIsCompatible()) {
			var map = new GMap2($('map'));
			var location = $H(data.get('results'));
			var count=0;
				
			var baseIcon = new GIcon(G_DEFAULT_ICON);
			baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
			baseIcon.iconSize = new GSize(20, 34);
			baseIcon.shadowSize = new GSize(37, 34);
			baseIcon.iconAnchor = new GPoint(9, 34);
			baseIcon.infoWindowAnchor = new GPoint(9, 2);
			
			function createMarker(latlng, id, letter, info, toss) {
				console.log("loc " + letter + ": " + id + ", " + latlng + ", " + info + ", " + toss);
				var letteredIcon = new GIcon(baseIcon);
			//	letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
				letteredIcon.image = "/images/maps/icon_green" + letter + ".png";
				markerOptions = { icon:letteredIcon };
				var marker = new GMarker(latlng, markerOptions);
				marker.value = id;
				GEvent.addListener(marker,"click", function() {
					map.openInfoWindowHtml(latlng, info);
					});
				return marker;
				}
			
			$('event-body').update('');
			var sorted = doors.sortBy(function(s) { return s.length; })
	//		location.keys().sortBy( function (k) {
			doors.each( function (k) {
				var detail = $H(location.get(k));
				var lat = detail.get('lat');
				var lon = detail.get('lon');
				var letter = String.fromCharCode("A".charCodeAt(0) + count);
				detail.set('letter',letter);
				if(lat && lon && count < MAX_RESULTS){
					var point = new GLatLng(lat, lon);
					var info = "<b>" + detail.get('DOORNAME') + "</b><br><br>" + detail.get('ADDRESS') + "<br>" + detail.get('CITY') + ", " + detail.get('STATE') + " " + detail.get('ZIP');
			//		console.log("loc: " + detail.get('DOOR_ID') + ": " + k  + ": " + lat + "|" + lon + " - " + info);
					var themark=createMarker(point, detail.get('DOOR_ID'), letter, info, k);
					map.addOverlay(themark);
					if(count == 0){
						var axis = new GLatLng(c_lat, c_lon);
						map.setCenter(axis, 10);
						map.openInfoWindowHtml(point, info);
						}
					templatefactory.get('store-locator-result-row').evaluateCallback({
						object: detail,
						callback: function(html) {
							$('event-body').insert(html);
							var loclinkid = $("door_" + detail.get('DOOR_ID'));
							var maplinkid = $("maplink_" + detail.get('DOOR_ID'));
							loclinkid.observe('click', function(evt) {
									console.log("clicked door_" + detail.get('DOOR_ID'));
									GEvent.trigger(themark, 'click');
									});
							maplinkid.observe('click', function(evt) {
									console.log("clicked maplink_" + detail.get('DOOR_ID'));
									GEvent.trigger(themark, 'click');
									});
					//		GEvent.addDomListener(loclinkid,"click", function() {GEvent.trigger(themark, 'click');});
					//		GEvent.addDomListener(maplinkid,"click", function() {GEvent.trigger(themark, 'click');});
							}
						});
		//			GEvent.addDomListener($('maplink_129871'), "click", function() {map.openInfoWindowHtml(point, info);});
					count++;
					}
				});
			map.addControl(new GSmallMapControl());
			map.addControl(new GMapTypeControl());
			$('many_locations').update(count);
			$('events-loading').hide();
			$('events-results').show();
			}
		else {
			$('opt-loading').hide();
			$('signup-form').show();
			alert(rb.keys.get('not_compatible'));
			}
		}
	else{
		$('opt-loading').hide();
		$('signup-form').show();
		showError(rb.keys.get('no_criteria'));
		}
	}

function showError(error){
	var messages = $('locator_messages');
	var messageUL = messages.down('ul');
	messageUL.select('li').each(function(elm){elm.remove()});	
	messageUL.insert('<li>' + error + '</li>');
	messages.show();
	ErrorsOn=2;
	}

function showOptError(error){
	var messages = $('optin_messages');
	var messageUL = messages.down('ul');
	messageUL.select('li').each(function(elm){elm.remove()});	
	messageUL.insert('<li>' + error + '</li>');
	messages.show();
	ErrorsOn=2;
	}

function hideError(){
	if(ErrorsOn){
		if(ErrorsOn == 1){
			$('locator_messages').hide();
			$('optin_messages').hide();
			ErrorsOn=0;
			}
		else{ErrorsOn=ErrorsOn-1;}
	}
	}