var submitted = false;
var map;
var pointshown = false;
var selected_marker;

var mcfg = new Object();
mcfg.pp = 4; 		//items per page
mcfg.dfzoom = 12; 	// default zoom

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_locations = new Array; 
var use_filters = false;

first_load = true;
map = false; 

function gmap_directions(){	
	var to_addr = selected_marker.dir_to;
	submit_gmap_form('',to_addr);
}

function addStore(point, marker_xml, marknum){
	var icon = new GIcon(G_DEFAULT_ICON);
	icon.image = "img/icon/kor/letter_" + letters[marknum] + ".png";
	icon.iconSize = new GSize(22, 41);
	icon.iconAnchor = new GPoint(6, 21);    
	icon.infoWindowAnchor = new GPoint(9, 5);
	var marker = new GMarker(point, icon);
	var URL =  marker_xml.getAttribute("url");
	
	marker.info = new Object();
	//check for URL
	if(marker_xml.getAttribute("url") != ""){
		marker.info.address = "<h3><a href=\"" + marker_xml.getAttribute("url") + "\" target=\"_blank\">" + unescape(marker_xml.getAttribute("name")) + "</a></h3>";
	} else {
		marker.info.address = "<h3>" + unescape(marker_xml.getAttribute("name")) + "</h3>";
	}
	marker.info.address = marker.info.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.info.address = marker.info.address + "<p>" + marker_xml.getAttribute("distance") + " miles <a href=\"#\" class=\"dir\" onclick=\"gmap_directions();return false\">Get directions</a></p>";
	

	marker.dir_to = marker_xml.getAttribute("address")+' '+marker_xml.getAttribute("city") + ", " +marker_xml.getAttribute("state") + ' '+marker_xml.getAttribute("zip");
		
	marker.iid = marknum;
	
	
	GEvent.addListener(marker, "click_action", function() {
		show_custom_info_window(marker);
	});
	
	GEvent.addListener(marker, "click", function() {
		activate_marker( global_locations[marker.iid] );
	});
	
	// add the store to the locations sidebar
	
	var location = document.createElement("li");
	location.iid =  marknum;
	location.id = "location_" + marknum;
	var class_names = "";
	if ($('results_list 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];	
		letter_image.src = "img/icon/kor/dot_" + 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= "29px";
		var letter_image_src = "img/icon/letter_" + letters[marknum] + '.png';		
		
		letter_image.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + letter_image_src + "', sizingMethod='scale')";
		letter_image.className = 'letter';
	}
	
	$(location).append(letter_image);
	// The title
	var title = document.createElement("h4");
	title.appendChild(document.createTextNode(title));
	title.firstChild.nodeValue = unescape(marker_xml.getAttribute("name"));
	$(location).append(title);
	// The address
	var htm = '<p>';
	htm += marker_xml.getAttribute("address") + "<br >" + marker_xml.getAttribute("city") + ", " +  marker_xml.getAttribute("state") + " " + marker_xml.getAttribute("zip");
	htm += "<br >" + marker_xml.getAttribute("phone");	
	if (URL != "") {
		htm += '</p><p><a href="'+URL+'" target="_blank">Visit Store Website</a>';	
	}
	htm += '</p>';
	

	$(location).append(htm);
	
	// URL
	if (URL != ""){
		var htm = document.createElement("p");
		htm.innerHTML = '<a href="'+URL+'" target="_blank">'+URL+'</a>';
		//$(location).append(htm);
	}
	
	
	global_locations[location.iid] = location;	
	$('#store_list').append(location);
	
	highlight_locations(); 
	global_markers[marknum] = marker;
	return marker;
}

function init_map(xmldata,start){
	var xml = GXml.parse(xmldata);	
	map = new GMap2(document.getElementById("gmap_canvas"));
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
	
	mcfg.xml = xml;
	mcfg.first = true;
	show_stores(start);
	
	var el = xml.documentElement.getElementsByTagName("hash")[0];	
	var hash = el.firstChild.nodeValue;
	location.hash = hash;
}

function show_stores(start){	
	var xml = mcfg.xml;	
	var center = xml.documentElement.getElementsByTagName("default_location")[0];
	map.setCenter(new GLatLng(center.getAttribute("lat"), center.getAttribute("lng")), Number(center.getAttribute("zoom")));
	
	if(xml.getElementsByTagName("store_xml").length > 0){
		$('#store_list').addClass("locations");		
		
		var locstr = center.getAttribute("heading");
		$("#results_heading").html(locstr);
		
		// Set the markers
		var markers = xml.documentElement.getElementsByTagName("store");
		var bounds = new GLatLngBounds;		
		
		if (markers.length <= mcfg.pp || (start + mcfg.pp) >= markers.length){ end = markers.length; }else{ end = start + mcfg.pp; }
		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++);				
			map.addOverlay(marker);
			bounds.extend(point);						
		}
		
		if (mcfg.first){
			// Put in the paging links
			$('#pages_bb').html('');			
			
			var pgs = Math.ceil(markers.length/mcfg.pp);
			mcfg.max = markers.length;
			
			if (pgs > 1){
				//previous button
				pp_prev = document.createElement("a");
				pp_prev.appendChild(document.createTextNode("<< "));
				pp_prev.href = "javascript:void()";					
				pp_prev.onclick = function(){ dopage(0); return false; }
				$('#pages_bb').append($(pp_prev));
				
				for (i=1;i<=pgs;i++){
					var pp = document.createElement("a");
					pp.appendChild(document.createTextNode(" "+i+" "));
					pp.href = "javascript:void()";	
					pp.id = 'pp_'+i;
					pp.val = (i-1)*mcfg.pp
					pp.onclick = function(){ dopage(1, this.val);return false; }
					$('#pages_bb').append(pp);	
					mcfg.maxp = i;
					//$('#pp_'+i).bind('click', function(){ dopage(1, i*mcfg.pp); return false; });
				}
				
				
				
				pp_next = document.createElement("a");
				pp_next.appendChild(document.createTextNode(" >>"));
				pp_next.className = "next";
				pp_next.href = "javascript:void()";	
				pp_next.id = 'pp_next';			
				$('#pages_bb').append(pp_next);
				
				$('#pp_next').bind('click', function(){ dopage(1); return false; });
				mcfg.first = false;
				mcfg.pg_num = 1;
			} 
			
			//if (start > 0 && ((page_num + 1) < markers.length/mcfg.pp)){
			//	separator = document.createTextNode(' | ');
			//	$('#pages_bb').append(separator);
			// }			
		} else {
			$('#pp_'+mcfg.pg_num).removeClass('pp_sel');
			mcfg.pg_num = (page_num+1);
		}
		
		$('#pp_'+mcfg.pg_num).addClass('pp_sel');
												
		// 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));
		var zm = map.getBoundsZoomLevel(bounds);
		if (zm > mcfg.dfzoom) zm = mcfg.dfzoom;
		map.setZoom(zm);							
	} else if(xml.getElementsByTagName("noresults").length > 0){
		//load_map_initial();
		document.getElementById("results_heading").innerHTML = "No Results Found";
		$('#store_list').className = "noresults";
		var noresult = document.createElement("div");
		var message = xml.documentElement.getElementsByTagName("message")[0];		
				
		noresult.innerHTML = message.firstChild.nodeValue;
		$('#store_list').append(noresult);
	}
	
}



		
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,'unload',GUnload,false); // Prevent memory leaks
		
/**** Other Functions ****/

selected_location = false;
function highlight_locations(){
	var locations = $('#store_list li');
	for(i=0;i<locations.length;i++){
		var location = locations[i];
		// Hover
		location.onmouseover = function(){ $(this).addClass('hover') }
		location.onmouseout = function(){ $(this).removeClass('hover') }
		// Active
		location.onclick = function(){ 
			activate_marker(this);
		}
	}
}

function activate_marker(el){
	if (selected_location == el){ return false; }
	$(el).addClass('selected'); 
	GEvent.trigger(global_markers[el.iid], "click_action");
	if (selected_location){ $(selected_location).removeClass('selected'); } 
	selected_location = el; 
}
		
function deactivate_marker(el){
	$(el).removeClass('selected');
	selected_location = false;
}
		

// Search form
query = false; // global for paging
page_num = false; // global

function set_searchform(){
	//if (!$('search_form')) return false;
	var hash = location.hash.substr(1);
	var pcs = ['city','zone','code','country'];
	if (hash){
		var tmp = hash.split('&');
		for(i=1;i<pcs.length;i++){
			var vv = tmp[i];
			if (vv){
				var kk = pcs[i];
				$('#'+kk).val(vv);
			}				
		}
		dosearch();
	}
}

var dosearch = function(){
	
	if(!submitted) {		
		submitted = true;	
		$('#store_list').html('');
		$("#overlay").remove();
		$("#results_heading").html('<small>Searching...</small>');
		pointshown = false;
		
		var url = 'cms/sf/xml';		
		$.post(url, $('#f_search').serialize(), checkResults);		
		
	}

	return false;
}

var checkResults = function(data){	
	submitted = false;
	init_map(data, 0);
	

}


function dopage(n, nn){	
	$('#store_list').html('');
	if (!nn){
		if (n) page_num++;
		else page_num--;
		nn = page_num*mcfg.pp
	} else {
		page_num = nn/mcfg.pp;
	}
	
	if (nn > mcfg.max) {
		nn = 0;
		page_num = 0;
	} else if (nn < 0) {
		page_num = mcfg.maxp;
		nn = mcfg.maxp*mcfg.pp;		
	}
		
	map.clearOverlays();	
	show_stores(nn);
}
		
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.info.services;
	}else{
		//bring first tab forward
		Element.removeClassName(alltabs,'tabs2');
		Element.addClassName(alltabs,'tabs');
		my_tab.innerHTML = my_window.marker.info.address;
	}
	position_window(my_window, my_window.marker);
	
	return false;
}

function close_window(){
	$('#overlay').css('display','none');
	//deactivate_marker( $("#location_"+$('#overlay').marker.iid) );
	deactivate_marker(selected_location);
	return false;
}
		
function show_custom_info_window(marker){
			
	map_point = map.fromLatLngToDivPixel(marker.getPoint());
	
	if (!pointshown || !$('#overlay')){ 
		var new_obj = document.createElement("div");
		new_obj.style.display = 'none';
		new_obj.innerHTML = $('#overlay_seed').html();
		new_obj.id = 'overlay';	
		
		var pane = map.getPane(G_MAP_MARKER_PANE);	
		$(pane).append(new_obj);
		
		$('#overlay div.inside').attr('id','overlay_info');		
		pointshown = true;
	}
	
	var my_window = $('#overlay');
	var winsel = '#overlay';
	
	// Attach the marker
	my_window.marker = marker;
	selected_marker = marker;	
	
	// Populate content
	var my_tab = $('#overlay_info');
	my_tab.html(marker.info.address);
	$(my_window).css('display','block');
	
	if (map.getZoom() < mcfg.dfzoom) map.setZoom(mcfg.dfzoom);
	var pan_to = new GLatLng( marker.getPoint().lat(), marker.getPoint().lng() )
	map.panTo( pan_to);	
	
	position_window(my_window, marker);	
}	
		
function position_window(my_window, marker){	
	var map_point = map.fromLatLngToDivPixel(marker.getPoint());
		
	var wh = parseInt(map_point.y) - $(my_window).height()-15;
	$(my_window).css('top',wh + "px");
	
	var horiz_loc = parseInt(map_point.x) - 67;
	$(my_window).css('left',horiz_loc + "px");
	
	$(my_window).css('z-index',99999);
	
	
	
	
} 
		
function submit_gmap_form(from_addr, to_addr){
	var q = '';
	if (from_addr) q = "from: " + from_addr+" ";
	if (to_addr) q += "to: " + to_addr;	
	$('#dir_qstring').attr('value',q);
	$('#f_directions').submit();
	return false;
}

$(window).load(function() { set_searchform(); });
