var simpleSearch=0; // 0 = google map with zip, address, and radius fields
					// 1 = simple display with region,state,store only and no map

var ErrorsOn=0;
var MAX_RESULTS=26;
var rb = new Resource({
	CONFIG_LIST:['storelocator'],
	LIMIT:['not_compatible','need_more_criteria','no_criteria','search_error','no_results','email_required','first_name_required','zip_required','optin_error','dir_distance','view_directions','view_map']
	});
var infowindow;

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);
	if(simpleSearch==1){$('fc-simple-search').show();$('fc-search').hide();}
	else{$('fc-search').show();$('fc-simple-search').hide();}
	});
	
function init_LocatorMap(){
//	Event.observe('simple-search-locator-button', 'click', showLocatorNoMap, true);
	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);
	if(field == 'REGION'){state_picker(thing);}
	if(field == 'STATE'){store_picker(thing);}
	}
	
function doOptIn(){
	if($F('EMAIL') == ""){showOptError(rb.keys.get('email_required'));}
	else{
		$('opt-loading').show();
		$('signup-form').hide();
		var params = [{
			"PC_EMAIL_ADDRESS" : $F('EMAIL'),
			"_SUBMIT" : "storelocator~email_signup"
			}];

		jsonRpcWrapper.fetch({
			method: 'email.signup', 
			params: params,
			onSuccess: function (jsonRpcResponse) {
				console.log("jsonRpcResponse: ", jsonRpcResponse);
				var data = jsonRpcResponse.getValue();
				console.log("data: ", data);
                if (jsonRpcResponse.errors) {
					console.log("errors: ", jsonRpcResponse.errors);
					$('signup-form').show();
					$('opt-loading').hide();
					$('signup-confirm').hide();
					showOptError(rb.keys.get('optin_error'));
					}
				else{
					console.log('Opt In successful');
	//				document.fire("CM:StoreLocSignUp", data.result);
	//				console.log("store loc page data is", data.result);
					$('opt-loading').hide();
					$('signup-confirm').show();
					}
				},
			onError: 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,dd){
	if(dd == 'yes'){
		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');
		console.log("from: " + address + ", " + city + ", " + state + " to: " + address2 + ", " + city2 + ", " + state2 + " " + zip2);
		$('route').update('');
		$('show_map').hide();
		$('driving-directions').hide();
		$('signup-form').hide();
		$('opt-loading').hide();
		$('signup-confirm').hide();
		
		$('show_driving_map').show();
		$('route').show();
		
		var mapOptions = {
			zoom: 10,
			center: new google.maps.LatLng(lat,lon),
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			navigationControl: true,
			mapTypeControl: true,
			scaleControl: true
			};
		var dmap = new google.maps.Map($('driving_map'), mapOptions);
		
		var directionsPanel = $('route');
		var directions = new GDirections(dmap, directionsPanel);
		directions.load("from: " + address + ", " + city + ", " + state + " to: " + address2 + ", " + city2 + ", " + state2 + " " + zip2);
		}
	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 showLocatorNoMap(){
	if($F('REGION') != "" || $F('STATE') != "" || $F('DOORNAME') != ""){
		$('show_map').hide();
		$('show_driving_map').hide();
		$('signup-confirm').hide();
		$('signup-form').show();
		$('opt-loading').hide();
		var params = [{
			"nomap" : 1,
			"country" : 'Japan',
			"region" : $F('REGION'),
			"state" : $F('STATE'),
			"show_stores_list" : $F('DOORNAME'),
			"fields" : "DOOR_ID, DOORNAME, EVENT_NAME, EVENT_START_DATE, EVENT_END_DATE, EVENT_IMAGE, STORE_HOURS, ADDRESS, ADDRESS2, STATE_OR_PROVINCE, REGION, COUNTRY, ZIP_OR_POSTAL, PHONE1"
			}];
		console.log("params: ", params);
		jsonRpcWrapper.fetch({
			method: 'locator.doorsandevents', 
			params: params,
			onSuccess: showit,
			onError: function () {
				console.log('Store Locator JSON failed to load ');
				showError(rb.keys.get('search_error'));
				}
			});
		}
	else{showError(rb.keys.get('no_criteria'));}
	}
	
function showLocatorMap(){
	if($F('REGION') != "" && $F('STATE') != ""){
		$('show_map').hide();
		$('show_driving_map').hide();
		$('signup-confirm').hide();
		$('signup-form').hide();
		$('opt-loading').show();
		var pair = new Array;
		var state = $F('STATE');
		pair = state.split(':');
		var params = [{
			"region" : $F('REGION'),
			"state" : pair[1],
			"show_stores_list" : $F('DOORNAME'),
			"fields" : "DOOR_ID, DOORNAME, EVENT_NAME, EVENT_START_DATE, EVENT_END_DATE, EVENT_IMAGE, STORE_HOURS, ADDRESS, ADDRESS2, STATE_OR_PROVINCE, REGION, COUNTRY, ZIP_OR_POSTAL, PHONE1"
			}];
		console.log("params: ", params);
		jsonRpcWrapper.fetch({
			method: 'locator.doorsandevents', 
			params: params,
            onSuccess: showit,
			onError: function () {
				console.log('Store Locator JSON failed to load ');
				showError(rb.keys.get('search_error'));
				}
			});
		}
	else {
        showError(rb.keys.get('need_more_criteria'));
    }
}
	
function showit(jsonRpcResponse) {
	var data = jsonRpcResponse.getValue();
	console.log("data: ", data);
	if(data == null){
		$('opt-loading').hide();
		$('signup-form').show();
		showError(error);
		}
	else if(data.count){
		var gotstores = data.count;
		console.log("count: ", gotstores);
		var error = data.error;
		console.log("error: ", error);
		var dd = data.driving_directions;
		console.log("driving_directions: ", dd);
//		var c_lat = data.latitude;
//		var c_lon = data.longitude;
		var doors = data.doors;
//		console.log("ground zero: " + c_lat + "," + c_lon);
		if(simpleSearch==0){
			$('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':'440px'});
			}
		$('special-events').hide();
		$('events-loading').show();
	
		var location = data.results;
		var count=0;

		if(simpleSearch==0){
			var mapOptions = {
				zoom: 14,
				center: new google.maps.LatLng('38.2526613','140.3384019'), // somewhere in japan - just a starting point, we are gonna switch to first location coords when points are rendered
				mapTypeId: google.maps.MapTypeId.ROADMAP,
				navigationControl: true,
				mapTypeControl: true,
				scaleControl: true
				};
			var map = new google.maps.Map($('map'), mapOptions);
			
			function createMarker(latlng, id, letter, info, toss) {
		//		console.log("loc " + letter + ": " + id + ", " + latlng + ", " + info + ", " + toss);
				var icon = new google.maps.MarkerImage("/images/maps/icon_green" + letter + ".png");
				var marker = new google.maps.Marker({
					position:	latlng, 
					icon:		icon,
					title:		letter,
					map:		map
					});
				google.maps.event.addListener(marker, 'click', function() {
					if (infowindow) infowindow.close();
					infowindow = new google.maps.InfoWindow({content: info});
					infowindow.open(map,marker);
					});
				return marker;
				}
			}
		
		$('event-body').update('');
		var sorted = doors.sortBy(function(s) { return s; });
		console.log(sorted);
		sorted.each( function (k) {
			console.log("sorted item: " + k);
			var spot = $H(location);
			console.log("spot: " + spot);
			var detail = spot.get(k);
			console.log("DOORNAME: " + detail.DOORNAME);

			if (count < MAX_RESULTS) {
				var letter = String.fromCharCode("A".charCodeAt(0) + count);
				detail.letter=letter;
				
				var doorname = detail.DOORNAME || '';
			    doorname = doorname.replace(/'/, "&#39");
                doorname = doorname.replace(/<.*/, "");
				detail.DOORNAME = doorname;
				if (doorname) {
					detail.EVENT_CLASS = '';
					var event_text = detail.EVENT_START_DATE;
					var event_end = detail.EVENT_END_DATE;

                    if (event_text && event_end) {
                        event_text = event_text.replace(/ 00:00:00/, "");
                        event_end = event_end.replace(/ 00:00:00/, "");
                        var start = new Array();
                        start = event_text.split('-');
                        event_text=start[2] + "/" + monthit(start[1]) + "/" + start[0];
                        var end = new Array(); 
                        end = event_end.split('-');
                        event_end=end[2] + "/" + monthit(end[1]) + "/" + end[0];
			        
                        if (event_text && event_end && event_text != event_end) {event_text += ' - ' + event_end;}
                        detail.EVENT_TEXT = event_text;
                    }
            	}
				else{detail.EVENT_CLASS = 'hidden';}
				
				var event_image = detail.EVENT_IMAGE;
				if(event_image == null){
					detail.EVENT_IMAGE = 'no_event.gif';
				//	detail.EVENT_CLASS = 'hidden';
					}
				
				var hours = detail.STORE_HOURS;
				if(hours != null){detail.STORE_HOURS = 'Store Hours: ' + hours;}
				
				var address2 = detail.ADDRESS2;
				if(address2 != null){detail.ADDRESS = detail.ADDRESS + '<br>' + address2;}
				
					
				if(simpleSearch==0){
					var distance = detail.DISTANCE;
					if(distance > 0){
						distance = rb.keys.get('dir_distance') + ' ' + distance.toFixed(2) + ' km';
						detail.DISTANCE = distance;
						}
					else{detail.DISTANCE = '';}
				
					var lat = detail.LATITUDE;
					var lon = detail.LONGITUDE;
					
					if(letter == "A"){
						map.setCenter(new google.maps.LatLng(lat, lon), 11);
						console.log('centering map to store A: lat '+lat+', lon '+lon);
						}
					
					var viewdd = rb.keys.get('view_directions');
					if(dd == 'no'){viewdd = rb.keys.get('view_map');}
					detail.maplinktitle = viewdd;
				
					var point = new google.maps.LatLng(lat,lon);
					var info = "<b>" + detail.DOORNAME + "</b><br><br>" + detail.ADDRESS + "<br>" + detail.PHONE1;
					console.log("loc: " + k + ":" + detail.DOOR_ID + ": " + letter  + ": " + lat + "|" + lon + " - " + info);
					var themark=createMarker(point, detail.DOOR_ID, letter, info, k);
					templatefactory.get('/templates/store-locator-result-row.tmpl').evaluateCallback({
						object: detail,
						callback: function(html) {
							$('event-body').insert(html);
							var loclinkid = $("door_" + detail.DOOR_ID);
							var maplinkid = $("maplink_" + detail.DOOR_ID);
							loclinkid.observe('click', function(evt) {
								console.log("clicked door_" + detail.DOOR_ID);
								google.maps.event.trigger(themark, 'click');
								});
							maplinkid.observe('click', function(evt) {
								console.log("clicked maplink_" + detail.DOOR_ID);
								google.maps.event.trigger(themark, 'click');
								});
							}
						});
					}
				else{
					console.log("adding door " + detail.DOORNAME + ", STATE: " + detail.STATE_OR_PROVINCE + ", REGION: " + detail.REGION + ", COUNTRY: " + detail.COUNTRY);
					templatefactory.get('/templates/store-locator-simple-result-row.tmpl').evaluateCallback({
						object: detail,
						callback: function(html) {
							$('event-body').insert(html);
							}
						});
					}
				count++;
				}
			});
		if(simpleSearch==0){$('many_locations').update(count);}
		$('events-loading').hide();
		$('events-results').show();
		}
	else{
	console.log('door count was zero');
		$('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;}
		}
	}

function monthit(month){
	if (month == "JAN"){return "01";}
	else if (month == "FEB"){return "02";}
	else if (month == "MAR"){return "03";}
	else if (month == "APR"){return "04";}
	else if (month == "MAY"){return "05";}
	else if (month == "JUN"){return "06";}
	else if (month == "JUL"){return "07";}
	else if (month == "AUG"){return "08";}
	else if (month == "SEP"){return "09";}
	else if (month == "OCT"){return "10";}
	else if (month == "NOV"){return "11";}
	else if (month == "DEC"){return "12";}
	}