/*
######################################################################

trip planner js v1.0 - copyright wine country getaways 2009

######################################################################
*/

console.log("wine, wine, wine, why the goose drank wine");

var overlaycgi = "/trip-planner/getinfo.cgi?show=xml";
var directions;
var directionsPanel = false;
var overlayarg = "";
var overlayxml = null;
var winedata = [];
var tripdata = [];
var triplist = [];
var	avgLat = 0;
var avgLng = 0;
var avgTtl = 0;
var	maxLat = 0;
var maxLng = 0;
var	minLat = 0;
var minLng = 0;
var map;
var geocoder;
var docloc = " "+unescape(document.location);
var printpage = (docloc.indexOf("printcss=")>0) ? true : false;
var route = (docloc.indexOf("trip=")>0) ? docloc.split("trip={")[1].replace(/}/g,'').replace(/\+/g,' ').replace(/&printcss=true/g,'') : false;
var daddy = "Enter Address Here";
var saddy = (route && route.indexOf('Start: ') > -1) ? route.split('Start: ')[1].split('@')[0] : daddy;
var eaddy = (route && route.indexOf('End: ') > -1) ? route.split('End: ')[1].split('@')[0] : daddy;
var startAddress = (saddy != daddy) ? 'Start: '+ route.split('Start: ')[1].split('{')[0] : false;
var endAddress 	 = (eaddy != daddy) ? 'End: '+ route.split('End: ')[1].split('{')[0] : false;
var addybutton = (startAddress) ? 'Update Start &amp; End Addresses' : 'Save Starting &amp; Ending Addresses';
var share = (docloc.indexOf("showsearch=")>0) ? docloc.split("showsearch=")[1] : '';
var thisURL = 'http://winecountrygetaways.com/trip-planner/index.html';
var gmark = false;
var imageSource = ["http://www.google.com/intl/en_ALL/mapfiles/marker.png","/css/markeryellow.png","/css/markergreen.png"];
var preload = [];
for(var i=0;i<imageSource.length;i++){
	preload.push(new Image);
	preload[i].src = imageSource[i];
}
var yellowIcon = new GIcon(G_DEFAULT_ICON, imageSource[1]); 
var greenIcon = new GIcon(G_DEFAULT_ICON, imageSource[2]); 
var ts = false;
var te = false;


// ####################################################################################
// onload
// ####################################################################################

function load() {
	// google map check
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		map.setCenter(new GLatLng(38.228008,-122.330730), 6);
		map.enableScrollWheelZoom();
		map.addControl(new GLargeMapControl());
		geocoder = new GClientGeocoder();
	}
// 
// 	// set default A-Z list position
	var AZ = 'A';
// 
// 	// uncheck any options left on from page back/forward
	unchecker();
// 
// 	// get region options
	getfile(overlaycgi+"&show=regions", function(rdata){
		
		var menu = rdata.split('\n');
		for(var i=0;i<menu.length;i++){
			if(menu[i].split('|')[1]){
				var o = elem('option',{'value':menu[i].split('|')[0]});
				o.innerHTML=menu[i].split('|')[1];
				document.getElementById('plnRegion').appendChild(o);
			}
		}
		
		// set default to 0
		document.getElementById('plnRegion').selectedIndex = 0;
		// if share, loop options and set default to preset region
		if(share.indexOf('region=') > -1){
			var selreg = share.split('region=')[1].split('&')[0];
			var azlist = document.getElementById('plnRegion').getElementsByTagName('option');
			for(var i=0;i<azlist.length;i++){
				if (azlist[i].value == selreg){
					document.getElementById('plnRegion').selectedIndex = i;
					break;
				}
			}
		}
	});

	// if share link
   	if(share != ''){
		// turn on check boxes
		if(share.indexOf('tours=y') > -1) document.getElementById('tours').checked = true;
		if(share.indexOf('picnic=y') > -1) document.getElementById('picnic').checked = true;
		if(share.indexOf('bocce=y') > -1) document.getElementById('bocce').checked = true;
		if(share.indexOf('family=y') > -1) document.getElementById('family').checked = true;
		if(share.indexOf('organic=y') > -1) document.getElementById('organic').checked = true;
		if(share.indexOf('boutique=y') > -1) document.getElementById('boutique').checked = true;
		// show shared points
		showsavedoverlays(map,share);   		
		// if share by windery, get A-Z value
		if(share.indexOf('winery=') > -1){
			AZ = share.split('winery=')[1][0];
 		}
	}
	
	// get A-Z options
	getAlpha(AZ);
	
	// set default A-Z
	var azlist = document.getElementById('nameAZ').getElementsByTagName('option');
	for(var i=0;i<azlist.length;i++){
		if (azlist[i].value == AZ){
			document.getElementById('nameAZ').selectedIndex = i;
			break;
		}
	}
	
	// set 3 panel
 	directionsPanel = document.getElementById("tripdirections");
	directions = new GDirections(map, directionsPanel);


	// if shared trip
   	if (route){
   		route = escape(route);
		if(!printpage){
	   		showsavedoverlays(map,'&ll='+route,true);
   		}else{
			if(route.indexOf('Start%3A') > -1){
				ts = true;
			}

			if(route.indexOf('End%3A') > -1){
				te = true;
			}
			showsavedoverlays(map,'&ll='+route,true);
			window.setTimeout(function(){destchange();},200);
		}
	
	   	warn(false);
   	}
}

function destchange(){
	if(!document.getElementById("ssaddy")){
		window.setTimeout(function(){destchange();},200);
	}else{
		if(ts && route && route[0].indexOf('Start:') > -1){
			if (!ts){document.getElementById("startbox").style.position = "absolute";document.getElementById("startbox").style.left = "-10000px"}
			if (!te){document.getElementById("endbox").style.position = "absolute";document.getElementById("endbox").style.left = "-10000px"}
			tabIt('dir');
		}else if(te && route && route[(route.length - 1)].indexOf('End:') > -1){
			if (!ts){document.getElementById("startbox").style.position = "absolute";document.getElementById("startbox").style.left = "-10000px"}
			if (!te){document.getElementById("endbox").style.position = "absolute";document.getElementById("endbox").style.left = "-10000px"}
			tabIt('dir');
		}else if(!ts && !te){
			document.getElementById("startbox").style.position = "absolute";
			document.getElementById("startbox").style.left = "-10000px";
			document.getElementById("endbox").style.position = "absolute";
			document.getElementById("endbox").style.left = "-10000px";
			tabIt('dir');
		}else{
			window.setTimeout(function(){destchange();},200);
		}
	}



}

// ####################################################################################
// end onload
// ####################################################################################



// reset search params
function resetSearch(){
	document.getElementById('nameAlpha').selectedIndex = 0;
	document.getElementById('plnRegion').selectedIndex = 0;
	unchecker();
}

// uncheck options
function unchecker(){
	document.getElementById('tours').checked = false;
	document.getElementById('picnic').checked = false;
	document.getElementById('bocce').checked = false;
	document.getElementById('family').checked = false;
	document.getElementById('organic').checked = false;
	document.getElementById('boutique').checked = false;
}

// warning message overlay show/hide
function warn(onoff,msg){
	if (onoff){
		document.getElementById('planmessagetxt').innerHTML = msg;
		document.getElementById('planmessage').style.visibility = "visible";
		document.getElementById('planfade').style.opacity = .35;
	}else{
		document.getElementById('planmessage').style.visibility = "hidden";
		document.getElementById('planfade').style.opacity = 1;
	}
}



function setAddress(s,e) {
	startAddress = false;
	endAddress = false;
	if (s != daddy && s != ""){
		geocoder.getLatLng(s,function(point) {
			if (!point) {
				alert("Sorry the Starting Address, " + s + " not found");
			}else{
				point = point+" ";
				point = point.split('\(')[1].split('\)')[0].replace(/ /g,'');
				startAddress = "Start: "+s+"@"+point;
				if(e != daddy && e != ""){
					geocoder.getLatLng(e,function(point) {
						if (!point) {
							alert("Sorry the Ending Address, " + e + " not found");
						}else{
							point = point+" ";
							point = point.split('\(')[1].split('\)')[0].replace(/ /g,'');
							endAddress = "End: "+e+"@"+point;
							setStartEnd();
						}
					});
				}else{
					setStartEnd();
				}
			}
		});
	}else if(e != daddy && e != ""){
		geocoder.getLatLng(e,function(point) {
			if (!point) {
				alert("Sorry the Ending Address, " + e + " not found");
			}else{
				point = point+" ";
				point = point.split('\(')[1].split('\)')[0].replace(/ /g,'');
				endAddress = "End: "+e+"@"+point;
				setStartEnd();
			}
		});
		if(document.getElementById('ssaddy')){
			document.getElementById('ssaddy').value = daddy;
		}
	}else if(document.getElementById('ssaddy')){
		document.getElementById('ssaddy').value = daddy;
		document.getElementById('addy').value = daddy;
		setStartEnd();
	}
}



function setStartEnd(){
 	var newroute = [];
	if (startAddress){
		newroute.push(startAddress);
	}
	for (var i = 0; i < route.length; i++) {
		if(route[i].indexOf('Start:') < 0 && route[i].indexOf('End:') < 0){
			newroute.push(route[i]);
		}
	}

	if (endAddress) newroute.push(endAddress);

	route = newroute;

	addClassName(document.getElementById('emailTrip').parentNode.parentNode, 'activelinks');
	
	var trippy = document.getElementById('emailTrip').href;
	trippy = trippy.replace(/%7B/gi,'{')
	trippy = trippy.replace(/%7D/gi,'}')
	trippy = trippy.replace(/{Start[^}]+}/gi,'')
	trippy = trippy.replace(/{End[^}]+}/gi,'')
	trippy = trippy.replace(/{/gi,'%7B')
	trippy = trippy.replace(/}/gi,'%7D')
	trippy = trippy.split('?')[1];

	var s = (startAddress)?'%7B'+escape(startAddress)+'%7D':''; 
	var e = (endAddress)?'%7B'+escape(endAddress)+'%7D':''; 
	trippy = trippy.replace(/trip=/g,'')

	document.getElementById('emailTrip').href = thisURL+"?trip="+s+trippy+e;
	document.getElementById('printTrip').href = thisURL+"?trip="+s+trippy+e+'&printcss=true';

}


// function for showing elements
function showsavedoverlays(map,argstoshow,showdest){
//	document.getElementById('mapx').getElementsByTagName('input')[0].value = thisURL+"?showsearch="+argstoshow;
	warn(true,'Loading...');
	map.clearOverlays();
	if(argstoshow.indexOf('Start%3A') > -1){
		var s = argstoshow.split('Start%3A')[1].split('%7B')[0].split('@')[1].split('%2C');
		var point = new GLatLng(s[0],s[1]);
		var marker = map.addOverlay(createMarker(point,argstoshow.split('Start%3A')[1].split('%7B')[0].split('@')[0],greenIcon));
	}
	if(argstoshow.indexOf('End%3A') > -1){
		var s = argstoshow.split('End%3A')[1].split('%7B')[0].split('@')[1].split('%2C');
		var point = new GLatLng(s[0],s[1]);
		var marker = map.addOverlay(createMarker(point,argstoshow.split('End%3A')[1].split('%7B')[0].split('@')[0],greenIcon));
	}
	
	
	argstoshow = argstoshow.replace(/%26/ig,'\&');

	GDownloadUrl(overlaycgi+argstoshow, function(data, responseCode) {
		overlayxml = GXml.parse(data);
		var markers = overlayxml.documentElement.getElementsByTagName("marker");
		if(markers.length > 0){
			for (var i = 0; i < markers.length; i++) {
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lt")), parseFloat(markers[i].getAttribute("ln")));
				var icon = false;
				if(!winedata[markers[i].getAttribute("w")]){
					winedata[markers[i].getAttribute("w")] = new Array(
						markers[i].getAttribute("lt"),	//  0 = lat
						markers[i].getAttribute("ln"),	//  1 = lng
						markers[i].getAttribute("u"),	//  2 = url
						markers[i].getAttribute("g"),	//  3 = region
						markers[i].getAttribute("m"),	//  4 = family
						markers[i].getAttribute("a"),	//  5 = address
						markers[i].getAttribute("t"),	//  6 = tasting
						markers[i].getAttribute("r"),	//  7 = tours
						markers[i].getAttribute("p"),	//  8 = picnic
						markers[i].getAttribute("o"),	//  9 = organic
						markers[i].getAttribute("b"),	// 10 = bocce
						markers[i].getAttribute("f"),	// 11 = features
						markers[i].getAttribute("q")	// 12 = boutique
					);
					if(showdest){
						tripdata[markers[i].getAttribute("w")] = winedata[markers[i].getAttribute("w")];
						triplist.push(markers[i].getAttribute("w"));
						icon = yellowIcon;
					}
				}
				var thislat = markers[i].getAttribute("lt") * 1;
				var thislng = markers[i].getAttribute("ln") * 1;
				if (maxLat==0){
					maxLat = thislat;
					maxLng = thislng;
					minLat = thislat;
					minLng = thislng;
				}else{
					maxLat = (thislat > maxLat) ? thislat : maxLat;
					maxLng = (thislng > maxLng) ? thislng : maxLng;
					minLat = (thislat < minLat) ? thislat : minLat;
					minLng = (thislng < minLng) ? thislng : minLng;
				}
				avgLat = avgLat + thislat;
				avgLng = avgLng + thislng;
				avgTtl++;
				var marker = map.addOverlay(createMarker(point,markers[i].getAttribute("w"),icon));
			}
			var bigdiff = (((maxLat - minLat) * 1) > ((maxLng - minLng) * 1)) ? ((maxLat - minLat) * 1) : ((maxLng - minLng) * 1);
			if(bigdiff == 0){
				var zoomn = 14;
			}else if(bigdiff < .3){
				var zoomn = 11;
			}else if(bigdiff < .8){
				var zoomn = 10;
			}else if(bigdiff < 1.1){
				var zoomn = 9;
			}else if(bigdiff < 2){
				var zoomn = 8;
			}else if(bigdiff < 5){
				var zoomn = 7;
			}else if(bigdiff < 7){
				var zoomn = 6;
			}else if(bigdiff < 10){
				var zoomn = 5;
			}else{
				var zoomn = 4;
			}
			map.setCenter(new GLatLng((avgLat * 1)/avgTtl, (avgLng * 1)/avgTtl), zoomn);
			warn(false);
		}else{
			map.setCenter(new GLatLng(38.228008,-122.330730), 6);
			warn(true,'Sorry, No Matches. Please Try Again.');
		}
		if (showdest){
			document.getElementById('infobox').style.display = "none";
			buildtriplist();
		}
	});
   	if (route){
		showstops();
   	}
}

function showstops(){
	if(route && route[0] && route[0].split("@")[1]){
		for (var i = 0; i < route.length; i++) {
			var point = new GLatLng(parseFloat(route[i].split("@")[1].split(",")[0]), parseFloat(route[i].split("@")[1].split(",")[1]));
			var rmark = createMarker(point,route[i].split("@")[0]);
			map.addOverlay(rmark);
		}
	}
}

// process form changes
var plnwarn = true;
function runsearch(wine){
	var plnURL = "";
	if (plnwarn){
		warn(false);
		plnwarn = false;
	}
	if(!wine || wine == 1){
		document.getElementById('nameAlpha').selectedIndex = 0;
		var region = document.getElementById('plnRegion').options[document.getElementById('plnRegion').selectedIndex].value;
		var size = (document.getElementById('plnSize')) ? document.getElementById('plnSize').options[document.getElementById('plnSize').selectedIndex].value : 'a';
		if(region == "" && wine != 1){
			plnURL = plnURL+"&region="+escape(region);
		}else if(region != "" || wine == 1){
			if(region == ""){
				document.getElementById('plnRegion').selectedIndex = document.getElementById('plnRegion').options.length - 1;
				region == "All";
			}
			plnURL = (document.getElementById('tours').checked == true) ? plnURL+"&tours=y" : plnURL;
			plnURL = (document.getElementById('picnic').checked == true) ? plnURL+"&picnic=y" : plnURL;
			plnURL = (document.getElementById('bocce').checked == true) ? plnURL+"&bocce=y" : plnURL;
			plnURL = (document.getElementById('family').checked == true) ? plnURL+"&family=y" : plnURL;
			plnURL = (document.getElementById('organic').checked == true) ? plnURL+"&organic=y" : plnURL;
			plnURL = (document.getElementById('boutique').checked == true) ? plnURL+"&boutique=y" : plnURL;
			plnURL = plnURL+"&region="+escape(region);
			plnURL = plnURL+"&size="+size;
		}
	}else{
		document.getElementById('plnRegion').selectedIndex = 0;
		unchecker();
		plnURL = "&winery="+escape(wine);
	}
	if(plnURL != "&region=" || plnURL == "&region=All"){
		plnURL = (plnURL == "&region=All") ? "&region" : plnURL;
		showsavedoverlays(map,plnURL);
 		avgLat = 0;
 		avgLng = 0;
 		avgTtl = 0;
		maxLat = 0;
		maxLng = 0;
		minLat = 0;
		minLng = 0;
	}else if(route){
		directions.loadFromWaypoints(route);
	}else{
		map.clearOverlays();
	}
}

// change alpha list
function getAlpha(AZ){
	getfile(overlaycgi+"&show=names&alph="+AZ, function(rdata){
		document.getElementById('nameAlpha').innerHTML = "";
		var menu = rdata.split('\n');
		for(var i=0;i<menu.length;i++){
			if(menu[i].split('|')[1]){
				var o = elem('option',{'value':menu[i].split('|')[0]});
				o.innerHTML=menu[i].split('|')[1];
				document.getElementById('nameAlpha').appendChild(o);
			}
		}
	   	if(share){
			if(share.indexOf('winery=') > -1){
				var azwine = share.split('winery=')[1].split('&')[0];
				var azlist = document.getElementById('nameAlpha').getElementsByTagName('option');
				for(var i=0;i<azlist.length;i++){
					if (azlist[i].value == azwine){
						document.getElementById('nameAlpha').selectedIndex = i;
						break;
					}
				}
			}
		}
	});
}

// change alpha list
function getSingle(AZ){
	document.getElementById('nameAlpha').innerHTML = '<option value="">Loading...</option>';
	getfile(overlaycgi+"&show=names&alph="+AZ, function(rdata){
		document.getElementById('nameAlpha').innerHTML = rdata;
	});
}

// add to trip
function addtotrip(key,obj){
	key = unescape(key);
	tripdata[key] = winedata[key];
	triplist.push(key);
	document.getElementById('infobox').style.display = "none";
	obj.parentNode.className="hidedes";
	buildtriplist();
	gmark.setImage(preload[1].src);
	map.closeInfoWindow();
}

// move up/down
function moveDest(item,move){
	var newp = item + move;
	var temp = triplist[newp];
	triplist[newp] = triplist[item];
	triplist[item] = temp;
	buildtriplist();
}

// remove from trip
function removetrip(item,obj){
	if(obj){
		obj.parentNode.className="hiderem";
		gmark.setImage(preload[0].src);
	}
 	var newtrip = [];
	for (var i = 0; i < triplist.length; i++) {
		if(item != triplist[i] && unescape(item) != triplist[i]){
			newtrip.push(triplist[i]);
		}
	}
	triplist = newtrip;
	tripdata[unescape(item)] = null;
	buildtriplist();
	if(!obj){
		runsearch();
		showstops();
	}else{
		map.closeInfoWindow();
	}
}

function buildtriplist(){
	if(!triplist[0]){
		document.getElementById('infobox').style.display = "none";
	}
	var liHTML = '';
	var tripURL = ''; 
	route = [];
	for (var i = 0; i < triplist.length; i++) {
		var up = (i == 0) ? '<a href="#" class="mup mdisabled" onclick="return false"></a> ' : '<a href="#moveup" class="mup" onclick="moveDest('+i+',-1);return false"></a> ';
		var down = (i == (triplist.length - 1)) ? '<a href="#" class="mdown mdisabled" onclick="return false"></a> ' : '<a class="mdown" href="#moveup" onclick="moveDest('+i+',1)"></a> ';
		liHTML = liHTML+'\
		<li id="ls'+i+'">\
		<div class="destool hidemore">\
		<!-- <a href="#" class="mdel" onclick="removetrip(\''+escape(triplist[i])+'\');return false"></a> -->\
		<a href="#" class="minfo" onclick="toggleClassName(this.parentNode.parentNode.getElementsByTagName(\'div\')[1],\'hidemore\');return false"></a> \
		'+up+down+'\
		</div>\
		<h5>'+triplist[i]+'</h5>\
		<div class="hidemore">'+tripdata[triplist[i]][5]+'</div>\
		</li>\
		';
		route.push(triplist[i]+'@'+tripdata[triplist[i]][0]+','+tripdata[triplist[i]][1]);
		var s = (startAddress)?'%7B'+escape(startAddress)+'%7D':''; 
		var e = (endAddress)?'%7B'+escape(endAddress)+'%7D':''; 
		tripURL = tripURL+'%7B'+escape(triplist[i])+'@'+tripdata[triplist[i]][0]+','+tripdata[triplist[i]][1]+'%7D';
		addClassName(document.getElementById('emailTrip').parentNode.parentNode, 'activelinks');
		document.getElementById('emailTrip').href = thisURL+"?trip="+s+tripURL+e;
		document.getElementById('printTrip').href = thisURL+"?trip="+s+tripURL+e+"&printcss=true";
		setAddress(saddy,eaddy);
	}

	document.getElementById('triplist').innerHTML = '\
	<li id="startbox"><form>\
	<h5>Starting Address</h5>\
	<input value="'+saddy+'" class="addy" id="ssaddy" onblur="saddy=this.value;if(eaddy==daddy){eaddy=this.value;document.getElementById(\'addy\').value = this.value}setAddress(saddy,eaddy);" onfocus="removeClassName(this,\'entered\')" />\
	</form></li>\
	'+liHTML+'\
	<li id="endbox"><form>\
	<h5>Ending Address</h5>\
	<input value="'+eaddy+'" class="addy" id="addy"/ onblur="eaddy=this.value;if(eaddy==\'\'){this.value=daddy}setAddress(saddy,eaddy);" onfocus="removeClassName(this,\'entered\')" >\
	</form></li>\
	';
}

// bubble maker
function createMarker(point,wkey,icon) {
	var routecopy = route;
	var isdest = false;
	if(icon){
			var marker = new GMarker(point,icon);
	}else if(routecopy){
		var coords = point+" ";
		coords = coords.split('\(')[1].split('\)')[0].replace(/ /g,'');
		for (var i = 0; i < routecopy.length; i++) {
			if(routecopy[i].indexOf(coords) > -1) isdest = true;
		}

		if (isdest && winedata[wkey]){
			var marker = new GMarker(point,yellowIcon);
		}else if (isdest && !winedata[wkey]){
			var marker = new GMarker(point,greenIcon);
		}else{
			var marker = new GMarker(point);
		}
	}else{
		var marker = new GMarker(point);
	}

	if (winedata[wkey]){
		GEvent.addListener(marker, "click", function() {
			gmark = marker;
			var bbweb = (winedata[wkey][2] != "" && winedata[wkey][2] != null) ? '<p><b>Website:</b> <a href="http://'+winedata[wkey][2]+'" target="_blank">'+winedata[wkey][2]+'</a></p>\n' : '';
			var bbtour = (winedata[wkey][7] != "" && winedata[wkey][7] != null) ? '<p><b>Tours:</b> '+winedata[wkey][7]+'</p>' : '';
			var bbtaste = (winedata[wkey][6] != "" && winedata[wkey][6] != null) ? '<p><b>Tasting Room:</b> '+winedata[wkey][6]+'</p>' : '';
			var bbfeature = (winedata[wkey][11] != "" && winedata[wkey][11] != null) ? '<p><b>Features:</b> '+winedata[wkey][11]+'</p>' : '';
			var p = (winedata[wkey][8]=='y') ? ' class="yup"' : '';
			var o = (winedata[wkey][9]=='y') ? ' class="yup"' : '';
			var b = (winedata[wkey][10]=='y') ? ' class="yup"' : '';
			var f = (winedata[wkey][4]=='y') ? ' class="yup"' : '';
			var q = (winedata[wkey][12]=='y') ? ' class="yup"' : '';
			var triptodo = (tripdata[wkey]) ? '<span class="hidedes">' : '<span class="hiderem">';
			var bubbleHTML = '\
				<div class="tinyBubbles">\
				<div class="addtoolbar">\
				<a href="javascript:map.closeInfoWindow()" class="closewin">X</a>\
				'+triptodo+'\
				<a onclick="removetrip(\''+escape(wkey)+'\',this)" class="remDest">Remove From My Trip <b>\-</b></a> \
				<a onclick="addtotrip(\''+escape(wkey)+'\',this)" class="addDest">Add to My Trip <b>\+</b></a>\
				</span></div>\
				<h4>'+wkey+' ('+winedata[wkey][3]+')</h4>\
				'+bbfeature+bbtour+bbtaste+bbweb+'\
				<ul>\
				<li'+p+'>picnic</li>\
				<li'+b+'>bocce</li>\
				<li'+o+'>organic</li>\
				<li'+f+'>family owned</li>\
				<li'+q+'>boutique</li>\
				</ul>\
				</div>\
			';
			marker.openInfoWindowHtml(bubbleHTML);
			// hacky way to delete google's close icon w/ a lazy ie sniff
			if (window.ActiveXObject) { // IE
				var kc = document.getElementById('map').getElementsByTagName('img');
				for (var i = 0; i < kc.length; i++) {
					if(kc[i].src.indexOf('_close') > -1){
						kc[i].style.display = "none";
					}
				}
			}
		});
	}
	return marker;
}

function tabIt(tab) {
	if(document.getElementById('planfade').className != 'itin' && tab == 'init'){
		document.getElementById('planfade').className='itin';
		runsearch();
	}else if(tab == 'dir'){
		document.getElementById('planfade').className='directions';
		if(route[1]){
			map.clearOverlays();
			directions.loadFromWaypoints(route);
			document.getElementById('dirbox').style.display = "none";
		}else{
			document.getElementById('dirbox').style.display = "block";
			directionsPanel.innerHTML = '';
		}
	}
}

// ADD CLASSES TO OBJECTS
function addClassName(element, className){
	if (hasClassName(element, className)) { return false; }
	if (!element.className) { element.className = className; }
	else { element.className += ' '+className; }
	return true;
}

// TEST FOR CLASS NAME
function hasClassName(element, className){
	var exp = new RegExp("(^|\\s)"+className+"($|\\s)");
	return (element.className && exp.exec(element.className))?true:false;
}

// REMOVE CLASSES FROM OBJECTS
function removeClassName(element, className){
	if (!hasClassName(element, className)) { return false; }
	var classNames = element.className.split(' ');
	var newClassNames = [];
	for (var a=0; a<classNames.length; a++){
		if (classNames[a] != className) { newClassNames[newClassNames.length] = classNames[a]; }
	}
	element.className = newClassNames.join(' ');
	return true;
}

// TOGGLE CLASS NAME
function toggleClassName(o,c){
	if (hasClassName(o,c)){
		removeClassName(o,c);
	}else{
		addClassName(o,c);
	}
}
// GENERIC HTTP REQUEST
function getfile(filepath,ftodo,fvar,ferr){
	var http_request = false;
	if (window.XMLHttpRequest) {
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType && filepath.indexOf('\.xml') > -1){
			http_request.overrideMimeType('text/xml');
		}
	}else if (window.ActiveXObject) { // IE
		try { http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){}
		}
	}
	if (!http_request) {
		return false;
	}
	http_request.onreadystatechange = function() {
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				if (filepath.indexOf('.xml') > -1){
					var rdata = http_request.responseXML.documentElement;
				}else{
					var rdata = http_request.responseText;
				}
				ftodo(rdata,fvar); // SUCCESS
   			}else{
   				if (ferr) { ferr(fvar,filepath,http_request.status,http_request.statusText); } // FAIL
  			}
		}
	};
	http_request.open('GET', filepath, true);
	http_request.send(null);
}

// SHORTCUT FOR BUILDING ELEMENTS
function elem(name, atts, content) {
	// name: a tag name, with optional class or id: 'div', 'div.foo', 'div#bar', 'div.foo#bar', 'div#bar.foo'
	// atts: optional. object where keys=attribute names, values=attribute values: {'href':'page.html','target':'_blank'}
	// content: optional. either a string, or an element, or an arry of strings or elements
	if (name.indexOf('.') + name.indexOf('#') > -2) {
		var className = (name.indexOf('.') > -1) ? name.replace(/^.*\.([^\.#]*).*$/,"$1") : "";
		var id = (name.indexOf('#') > -1) ? name.replace(/^.*#([^\.#]*).*$/,"$1") : "";
		name = name.replace(/^([^\.#]*).*$/,'$1');
	}
	var e = document.createElement(name);
	if (className) { e.className = className; }
	if (id) { e.id = id; }
	if (atts) {
		var key;
		for (key in atts) {
			// setAttribute() has shaky support, try direct methods first
			if (key == 'class') { e.className = atts[key]; }
			else if (key == 'id') { e.id = atts[key]; }
			else if (key == 'href') { e.href = atts[key]; }
			else if (key == 'action') { e.action = atts[key]; }
			else if (key == 'method') { e.method = atts[key]; }
			else if (key == 'title') { e.title = atts[key]; }
			else if (key == 'alt') { e.alt = atts[key]; }
			else if (key == 'border') { e.border = atts[key]; }
			else if (key == 'caption') { e.caption = atts[key]; }
			else if (key == 'cellspacing') { e.cellspacing = atts[key]; }
			else if (key == 'for') { e.htmlFor = atts[key]; }
			else { e.setAttribute(key, atts[key]); }
		}
	}
	if (content) {
		if (!(content instanceof Array)) {
			content = [content];
		}
		for (var a=0; a<content.length; a++) {
			if (typeof content[a] == 'string') {
				e.appendChild(document.createTextNode(content[a]));
			}else{
				e.appendChild(content[a]);
			}
		}
	}
	if (name.toLowerCase() == 'img' && !e.alt) { e.alt = ''; }
	return e;
}

function openPopup(url,name,width,height,resizable,scrollbars,menubar,toolbar,location,directories,status,top,left) {
	var tl = (top && left) ? ',top=' + top +',left=' + left : '';
	var popup = window.open(url, name, 'width=' + width + ',height=' + height + ',resizable=' + resizable + ',scrollbars=' + scrollbars	+ ',menubar=' + menubar + ',toolbar=' + toolbar + ',location=' + location + ',directories=' + directories + ',status=' + status+tl);
	popup.focus();
}

function showprint(a){
	openPopup(a.href,'printThis','850','600','0','yes','yes','yes','yes','yes','yes');
}



