submitted = false;

Event.observe(window, 'load', function() {

	if (!(navigator.userAgent.match(/AppleWebKit/i) && navigator.userAgent.match(/Mobile/i))) {
		new Ajax.Autocompleter("q", "locationChoices", "/buy/locator/autocomplete.php", { minChars: 2, afterUpdateElement: get_search_results });
	}
	
	var get = '' + window.location.search;
	var query = get.substring((get.indexOf('?'))+1);

	if(query != ''){
		var pairs = query.split('&');
		var keys = new Array();
		var showAdvanced = false;
		for(var i in pairs){
			if(isNaN(i) == false){
				var pair = pairs[i];
				var vals = pair.split('=');
				keys[vals[0]] = vals[1];
			}
		}
		var search = document.forms[1];
		
		if(keys['q'] != '' && keys['q'] != null){
			search.q.value = keys['q'].replace(/\%20/g,' ');
			search.q.value = search.q.value.replace(/\%2C/g,',');
			search.q.value = search.q.value.replace(/\+/g,' ');
		}
		if(keys['solution'] != '' && keys['solution'] != null){
			search.solution.value = keys['solution'];
			showAdvanced = true;
		}
		if(keys['servicetype'] != '' && keys['servicetype'] != null){
			search.servicetype.value = keys['servicetype'];
			showAdvanced = true;
		}
		if(keys['storename'] != '' && keys['storename'] != null){
			search.storename.value = keys['storename'].replace(/\%20/g,' ');
			search.storename.value = search.storename.value.replace(/\%2C/g,',');
			search.storename.value = search.storename.value.replace(/\+/g,' ');
			showAdvanced = true;
		}
		if(keys['q'] != '' && keys['q'] != null){
			get_search_results();
		}
		if(showAdvanced){
			if (is_ie){
				Effect.BlindDown('advsearch-content', {afterFinish: function(){$('advsearch-content').style.height = "1%";}}); // IE weirdness
			}else{
				Effect.BlindDown('advsearch-content');
			}
			Element.addClassName('advsearch', 'active');
			
			$('advsearch').active = true;
		}
	}
})

/**** GMaps ****/
letters = new Array;
letters[0] = "a";
letters[1] = "b";
letters[2] = "c";
letters[3] = "d";
letters[4] = "e";
letters[5] = "f";
letters[6] = "g";
letters[7] = "h";
letters[8] = "i";
letters[9] = "j";

global_markers = new Array; // global
global_locations = new Array; // global

function addStore(point, marker_xml, marknum){
	//  Start the Gmaps actions //
	var icon = new GIcon(G_DEFAULT_ICON);
	if (marker_xml.getAttribute("applestore") == "yes"){
		icon.image = "/buy/locator/images/icons/letter_" + letters[marknum] + "-black.png";
	} else {
		icon.image = "/buy/locator/images/icons/letter_" + letters[marknum] + ".png";
	}
	icon.iconSize = new GSize(21, 35);
	icon.iconAnchor = new GPoint(6, 21);    
	icon.infoWindowAnchor = new GPoint(9, 5);
	var marker = new GMarker(point, icon);
	// Give the marker all of it's information
	marker.tabContent = new Object();
	//check for URL
	if(marker_xml.getAttribute("url") != ""){
		marker.tabContent.address = "<h3><a href=\"" + marker_xml.getAttribute("url") + "\" target=\"_blank\">" + unescape(marker_xml.getAttribute("name")) + "</a></h3>";
	} else {
		marker.tabContent.address = "<h3>" + unescape(marker_xml.getAttribute("name")) + "</h3>";
	}
	if (marker_xml.getAttribute("applestore") == "yes" && marker_xml.getAttribute("concierge")){
		marker.tabContent.address = marker.tabContent.address + "<p>" +  marker_xml.getAttribute("address") + "<br >" + marker_xml.getAttribute("city") + ", " +  marker_xml.getAttribute("state") + " " + marker_xml.getAttribute("zip") + "<br >" + marker_xml.getAttribute("phone") + "<br ><br ><a href=\"" + marker_xml.getAttribute("concierge") + "\" target=\"_blank\">Make a reservation</a></p>";
	} else {
		marker.tabContent.address = marker.tabContent.address + "<p>" +  marker_xml.getAttribute("address") + "<br >" + marker_xml.getAttribute("city") + ", " +  marker_xml.getAttribute("state") + " " + marker_xml.getAttribute("zip") + "<br >" + marker_xml.getAttribute("phone") + "</p>";
	}
	marker.tabContent.address = marker.tabContent.address + "<p>~ " + marker_xml.getAttribute("distance") + " miles: <a href=\"#\" onclick=\"$('directions_subtab').style.display = 'block';position_window($('overlay'), $('overlay').marker);$('to_addr').focus()\">Get directions</a></p>";
	marker.tabContent.address = marker.tabContent.address + "<p id='directions_subtab' style='display:none'>Start address:<br ><input id='to_addr' type='text' style='width:95%'><br ><button type='submit' class='directions' onclick=\"submit_gmap_form($('to_addr').value,'" + marker_xml.getAttribute("address") + " , " + marker_xml.getAttribute("city") + ", " +  marker_xml.getAttribute("state") + " " + marker_xml.getAttribute("zip") + "');\">Get Directions</button></p>";

	marker.tabContent.services = "<p>" + marker_xml.getElementsByTagName("services")[0].firstChild.nodeValue + "</p>";
	// Add the click on tabs
	marker.internal_id = marknum;
	
	// use a custom action so that it can be activated through Gmaps or in the page
	GEvent.addListener(marker, "click_action", function() {
		show_custom_info_window(marker);
	});
	
	GEvent.addListener(marker, "click", function() {
		activate_marker( global_locations[marker.internal_id] );
	});
	
	// add the store to the locations sidebar
	
	var location = document.createElement("li");
	location.internal_id =  marknum;
	location.id = "location_" + marknum;
	var class_names = "ipod repair osx"; // Need to create these...
	if ($('results_list').getElementsByTagName('li').length == 0){ // This is the first location
		class_names += " first";
	}
	location.style.className = class_names;
	// The letter image
	if (!use_filters){
		var letter_image = document.createElement("img");
		letter_image.className = "letter";
		letter_image.alt = letters[marknum]
		if (marker_xml.getAttribute("applestore") == "yes"){
			letter_image.src = "/buy/locator/images/icons/letter_" + letters[marknum] + '-black.png';
		} else {
			letter_image.src = "/buy/locator/images/icons/letter_" + letters[marknum] + '.png';
		}
	}else{
		var letter_image = document.createElement("span");
		letter_image.title = letters[marknum];
		letter_image.style.display = 'block';
		letter_image.style.width = "21px";
		letter_image.style.height= "35px";
		if (marker_xml.getAttribute("applestore") == "yes"){
			var letter_image_src = "/buy/locator/images/icons/letter_" + letters[marknum] + '-black.png';
		} else {
			var letter_image_src = "/buy/locator/images/icons/letter_" + letters[marknum] + '.png';
		}
		letter_image.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + letter_image_src + "', sizingMethod='scale')";
		letter_image.className = 'letter';
	}
	location.appendChild(letter_image);
	// The title
	var title = document.createElement("h4");
	title.appendChild(document.createTextNode(title));
	title.firstChild.nodeValue = unescape(marker_xml.getAttribute("name"));
	location.appendChild(title);
	// The address
	var address = document.createElement("p");
	address.innerHTML = marker_xml.getAttribute("address") + "<br >" + marker_xml.getAttribute("city") + ", " +  marker_xml.getAttribute("state") + " " + marker_xml.getAttribute("zip");
	location.appendChild(address);
	global_locations[location.internal_id] = location;

	// Attach the whole thing
	$('results_list').appendChild(location);
	
	highlight_locations(); // Re-highlight locations
	
	// Return marker for gmaps
	global_markers[marknum] = marker;
	return marker
}

first_load = true;
map = false; // global
function load_map(xml_location, start) {

	if (GBrowserIsCompatible()) {
	// Initialize the map
		Element.show('gmap', 'map_legend');
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GScaleControl());
		
		// Power the store locations through XML
		GDownloadUrl(xml_location, function(data, responseCode) {
			var xml = GXml.parse(data);
	
			if(xml.getElementsByTagName("store_xml").length > 0)
			{
				$('results_list').className = "locations";
				// Set the center of the map
				var default_location = xml.documentElement.getElementsByTagName("default_location")[0];
				map.setCenter(new GLatLng(default_location.getAttribute("lat"), default_location.getAttribute("lng")));
	
				// Put city and state in search results
				var citystate = default_location.getAttribute("city") + ", " + default_location.getAttribute("state");
				document.getElementById("results_heading").innerHTML = "Locations near " + citystate;
				
				// Set the markers
				var markers = xml.documentElement.getElementsByTagName("store");
				var bounds = new GLatLngBounds;
				
				// Figure out start and end
				// start from function call
				if (markers.length <= 8 || (start + 8) >= markers.length){ end = markers.length; }else{ end = start + 8; }
				var marknum = 0;
				for (var i = start; i < end; i++) {
					var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
					var marker = addStore(point, markers[i], marknum++);
					
					// Add the point & extend the neccecary bounds
					map.addOverlay(marker);
					bounds.extend(point);						
				}
				
	
				// Put in the paging links
				$('page_nav').innerHTML = "";
				if (start > 0){
					paging_prev = document.createElement("a");
					paging_prev.appendChild(document.createTextNode("Previous"));
					paging_prev.className = "prev";
					paging_prev.href = "#";
					paging_prev.onclick = function(){ prev_page(); return false; }
					$('page_nav').appendChild(paging_prev)
				}
				if (start > 0 && ((page_num + 1) < markers.length/8)){
					separator = document.createTextNode(' | ');
					$('page_nav').appendChild(separator);
				}
				if ((page_num + 1) < markers.length/8){
					paging_next = document.createElement("a");
					paging_next.appendChild(document.createTextNode("Next"));
					paging_next.className = "next";
					paging_next.href = "#";
					paging_next.onclick = function(){ next_page(); return false; }
					$('page_nav').appendChild(paging_next)
				}
														
				// Set the zoom level & center to encompass all
				map.setCenter(new GLatLng( (bounds.getSouthWest().lat() + bounds.getNorthEast().lat())/2, (bounds.getSouthWest().lng() + bounds.getNorthEast().lng())/2));
				map.setZoom(map.getBoundsZoomLevel(bounds));
				Effect.Fade('activity',{duration: 0.25, queue: 'front'});						
			}				
			else if(xml.getElementsByTagName("noresult_xml").length > 0)
			{
				load_map_initial();
				document.getElementById("results_heading").innerHTML = "No Results Found";
				$('page_nav').innerHTML = "";
				$('results_list').className = "noresults";
				var noresult = document.createElement("ul");
				var message = xml.documentElement.getElementsByTagName("message")[0];
				noresult.innerHTML = message.firstChild.nodeValue;
				$('results_list').appendChild(noresult)
	
			}
			
			if (is_ie){
				Effect.BlindDown('results', {afterFinish: function(){$('results').style.height = "1%";}}); // IE weirdness
			}else{
				Effect.BlindDown('results');
				Effect.Fade('activity',{duration: 0.25, queue: 'end'});
			}
	
			submitted = false;
			
		}); // end GDownloadUrl
		
	} else { // Browser is not compatable
	}
}
		
function load_map_initial() {
	first_load = false;
	if (GBrowserIsCompatible()) {
// Initialize the map
		Element.show('gmap', 'map_legend');
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GScaleControl());
		map.setCenter(new GLatLng(37.926868, -97.294922));
		map.setZoom(3);
	}
}

Event.observe (window,'load',load_map_initial,false);
		
Event.observe (window,'unload',GUnload,false); // Prevent memory leaks
		
/**** Other Functions ****/

selected_location = false;
function highlight_locations(){
	var locations = $('results_list').getElementsByTagName('li');
	for(i=0;i<locations.length;i++){
		var location = locations[i];
		// Hover
		location.onmouseover = function(){ Element.addClassName(this, 'hover') }
		location.onmouseout = function(){ Element.removeClassName(this, 'hover') }
		// Active
		location.onclick = function(){ 
			activate_marker(this);
		}
	}
}
Event.observe (window,'load',highlight_locations,false);
		
function activate_marker(element){
	if (selected_location == element){ return false; }
	Element.addClassName(element, 'selected'); 
	GEvent.trigger(global_markers[element.internal_id], "click_action");
	if (selected_location){ Element.removeClassName(selected_location, 'selected'); } 
	selected_location = element; 
}
		
function deactivate_marker(element){
	Element.removeClassName(element, 'selected');
	selected_location = false;
}
		
// Adv search sliding
function set_advsearch_slider(){
	if (!$('advsearch')) return false;
	
	$('advsearch').onclick = function(){
		if (!this.active){
			if (is_ie){
				Effect.BlindDown('advsearch-content', {afterFinish: function(){$('advsearch-content').style.height = "1%";}}); // IE weirdness
			}else{
				Effect.BlindDown('advsearch-content');
			}
			Element.addClassName(this, 'active');
			
			this.active = true;
			return false;
		}else{
			Effect.BlindUp('advsearch-content');
			Element.removeClassName(this, 'active');
			this.active = false;
			return false;
		}
	}
}
Event.observe (window,'load',set_advsearch_slider,false);
		
// Search form
query = false; // global for paging
page_num = false; // global
function set_search_form(){
	if (!$('search_form')) return false;
	

	$('search_form').onsubmit = get_search_results;
}

var get_search_results = function(){
	
	if(!submitted) {
	
		submitted = true;
		
		Effect.Appear('activity',{duration: 0.25, queue: 'front'});
		query = $('search_form').getAttribute('remoteaction') + '?' + Form.serialize($('search_form'));
		$('results_list').innerHTML = '';
		page_num = 0;
		load_map(query, page_num);
		
	}

	return false;

}
Event.observe (window,'load',set_search_form,false);
		
function next_page(){
	//Effect.BlindUp('gmapwrap', {afterFinish: function(){$('gmapwrap').style.display = 'block';$('gmapwrap').style.visibility = 'hidden';}});			
	Effect.Appear('activity',{duration: 0.25, queue: 'front'});
	Effect.BlindUp('results', {afterFinish: function(){
	
	// Clear the locations list
	$('results_list').innerHTML = "";
	page_num++;
	first_load = false;
	load_map(query, (page_num)*8);
	
	}});
}

function prev_page(){
	//Effect.BlindUp('gmapwrap', {afterFinish: function(){$('gmapwrap').style.display = 'block';$('gmapwrap').style.visibility = 'hidden';}});			
	Effect.Appear('activity',{duration: 0.25, queue: 'front'});
	Effect.BlindUp('results', {afterFinish: function(){
	
	// Clear the locations list
	$('results_list').innerHTML = "";
	page_num--;
	first_load = false;
	load_map(query, (page_num)*8);
	
	}});
}
		
function change_tab(element, type){
	var my_window = $('overlay');
	var my_tab = $('overlay_tab');
	var alltabs = my_window.getElementsByTagName('ul')[0];
	// Unselect tabs
	var tabs = element.parentNode.parentNode.getElementsByTagName("a");
	for(i=0;i<tabs.length;i++){
		tab = tabs[i];
		Element.removeClassName(tab, 'selected');
	}
	// Select tab
	Element.addClassName(element, 'selected');
	
	if (type == 'services'){
		//bring second tab forward
		Element.removeClassName(alltabs,'tabs');
		Element.addClassName(alltabs,'tabs2');
		my_tab.innerHTML = my_window.marker.tabContent.services;
	}else{
		//bring first tab forward
		Element.removeClassName(alltabs,'tabs2');
		Element.addClassName(alltabs,'tabs');
		my_tab.innerHTML = my_window.marker.tabContent.address;
	}
	position_window(my_window, my_window.marker);
	
	return false;
}

function close_window(){
	$('overlay').style.display = 'none';
	deactivate_marker( $("location_" + $('overlay').marker.internal_id) );
	return false;
}
		
function show_custom_info_window(marker){
			
	map_point = map.fromLatLngToDivPixel(marker.getPoint());
	
	if (!$('overlay')){ // need to create the overlay inside the map pane
		var new_obj = document.createElement("div");
		new_obj.style.display = 'none';
		new_obj.innerHTML = $('overlay_temp').innerHTML;
		new_obj.getElementsByTagName('div')[0].id = 'overlay_tab';
		new_obj.id = 'overlay';
		document.body.appendChild(new_obj);
	}
	
	var my_window = $('overlay');
	
	// Attach the marker
	my_window.marker = marker;

	// make sure the first tab is in front
	var alltabs = my_window.getElementsByTagName('ul')[0];
	Element.removeClassName(alltabs,'tabs2');
	Element.addClassName(alltabs,'tabs');

	// Unselect tabs
	var tabs = alltabs.getElementsByTagName("a");
	for(i=0;i<tabs.length;i++){
		tab = tabs[i];
		Element.removeClassName(tab, 'selected');
	}
	// Select tab
	Element.addClassName(tabs[0], 'selected');
	
	// Populate content
	var my_tab = $('overlay_tab');
	my_tab.innerHTML = marker.tabContent.address;
	
	// Stick it to the map
	map.getPane(G_MAP_MARKER_PANE).appendChild(my_window);
	my_window.style.display = 'block';
	
	position_window(my_window, marker);
	
}	
		
function position_window(my_window, marker){
	// Get the positioning right
	var vert_loc = parseInt(map_point.y) - my_window.offsetHeight - 15;
	my_window.style.top = vert_loc  + "px";
	var horiz_loc = parseInt(map_point.x) - 50;
	my_window.style.left = horiz_loc + "px";
	
	var pan_to = new GLatLng( marker.getPoint().lat(), marker.getPoint().lng() )
	map.panTo( pan_to );
	
} 
		
function submit_gmap_form(from_addr, to_addr){
	var query = "from: " + from_addr + " to: " + to_addr;
	$('gmaps_form_query').value = query;
	$('gmaps_form').submit();
	return false;
}
