// *********************************
// js/blogview.js
// (c) 2008 MapMyFitness, LLC
// *********************************

// =================================
// Constants
// =================================
var API_LINK = 'http://api.mapmyfitness.com/3';
var map;
var bEleVisible = false;
var strURL = '';
var bolShowMarkers = 0;
var distance;
var route_key = '';

var intWindowHeight = 0;
var intWindowWidth = 0;

var _MMF_API_U = "info@mapmyfitness.com";
var _MMF_API_P = "0945fc9611f55fd0e183fb8b044f1afe";
var _MMF_API_KEY = "b513571b80685c74fa95b7755d916c24048889df4";
var _MMF_API_AUTH = "consumer_key="+_MMF_API_KEY+"&u="+_MMF_API_U+"&p="+_MMF_API_P+"&signed_token=09123j1k2kj1923892908091jsaj9e&signed_token_limit=1";

var jsonBranding = {
	'site': [
		{
			'url': 'http://www.mapmyfitness.com',
			'css': 'mapmyrun.css',
			'site_logo': 'logo_mmfit_gradient.gif',
			'register_image': 'bg_become_member_blue.gif',
			'action': 'running'
		},	
		{
			'url': 'http://www.mapmyrun.com',
			'css': 'mapmyrun.css',
			'site_logo': 'logo_mmrun_gradient.gif',
			'register_image': 'bg_become_member_blue.gif',
			'action': 'running'
		},
		{
			'url': 'http://www.mapmyride.com',
			'css': 'mapmyride.css',
			'site_logo': 'logo_mmride_gradient.gif',
			'register_image': 'bg_become_member_red.gif',
			'action': 'cycling'
		},
		{
			'url': 'http://www.mapmywalk.com',
			'css': 'mapmywalk.css',
			'site_logo': 'logo_mmwalk_gradient.gif',
			'register_image': 'bg_become_member_merlot.gif',
			'action': 'walking'
		},
		{
			'url': 'http://www.mapmyhike.com',
			'css': 'mapmyhike.css',
			'site_logo': 'logo_mmhike_gradient.gif',
			'register_image': 'bg_become_member_khaki.gif',
			'action': 'hiking'
		},
		{
			'url': 'http://www.mapmytri.com',
			'css': 'mapmytri.css',
			'site_logo': 'logo_mmtri_gradient.gif',
			'register_image': 'bg_become_member_silver.gif',
			'action': 'tri'
		}
	]
};

// =================================
// Functions 
// =================================
var Distance = 0;

function metersToMiles(meters) {
	return meters/1609.344;
}
function metersFromMiles(miles) {
	return miles*1609.344;
}
function updateDistance() {
  if(!doUpdateDistance()) {
    setTimeout(arguments.callee, 1000);  
  }
}

function unitChanged(u) {
	Style.Metric = (u == "metric");
	updateDistance();
}

function doUpdateDistance() {
	
	var e = document.getElementById("lblTotalDistance");
	if(!e) {
		return false;
	}
	
	var d;
	if(Style.Metric) {
		unit = "km";
		d = Distance/1000;
	} else {
		unit = "mi";
		d= metersToMiles(Distance);
	}
	
	e.innerHTML = Math.round(d*100)/100 + " " + unit;

	return true;
}

var Style = {Metric: false, MarkerDistanceImperial: 5};

function blogview() {
	
	BShowDMarkers = false;

	var qs = new Querystring(document.location.search.substring(1));
	route_key = qs.get('r');
	
	var route_type = qs.get('t');
	var rt = 0;
	
	if (route_type == 'fit') { rt = 0; }
	if (route_type == 'run') { rt = 1; }
	if (route_type == 'ride') { rt = 2; }
	if (route_type == 'walk') { rt = 3; }
	if (route_type == 'hike') { rt = 4; }
	if (route_type == 'tri') { rt = 5; }
	
 	
	// Units (m=Metric)
	var u = qs.get('u');
	if(u == 'm') {
		Style.Metric = true;
		document.getElementsByTagName('select')[0].selectedIndex = 1;
	}
	
	// Get Branding
	strURL = jsonBranding.site[rt].url;
	var strCSS = jsonBranding.site[rt].css;
	var strSiteLogo = jsonBranding.site[rt].site_logo;
	var strRegisterImage = jsonBranding.site[rt].register_image;
	var strAction= jsonBranding.site[rt].action;
	
	var imgSiteLogo = document.getElementById('site_logo');
	imgSiteLogo.src = 'images/' + strSiteLogo;

	var imgRegisterImage = document.getElementById('register_image');
	imgRegisterImage.src = 'images/' + strRegisterImage;
	
	var cssStyleSheet = document.getElementById('css_style_sheet');
	cssStyleSheet.href = 'css/' + strCSS;
	
	// Build Links & Buttons
	document.getElementById('community_link').href = strURL + '/community' + '?rs=' + escape(document.referrer);
	document.getElementById('community_link').innerHTML = 'Find a ' + strAction + ' Group';
	
	document.getElementById('training_link').href = strURL + '/training' + '?rs=' + escape(document.referrer);
	
	document.getElementById('events_link').href = strURL + '/events' + '?rs=' + escape(document.referrer);
	document.getElementById('route_link').href = strURL + '/view_route' + '?r=' + route_key;
	
	document.getElementById('challenges_link').href = strURL + '/fitness_goals' + '?rs=' + escape(document.referrer);
	document.getElementById('challenges_link').innerHTML = strAction + ' Challenges';
	
	document.getElementById('site_link').href = strURL + '?rs=' + escape(document.referrer);
	document.getElementById('register_link').href = strURL + '/register' + '?rs=' + escape(document.referrer);
	
	document.getElementById('full_screen_link').href = strURL + '/view_route?r=' + route_key + '&rs=' + escape(document.referrer);
	document.getElementById('elevation_link').href = strURL + '/view_route?r=' + route_key + '&show_elevation_panel=1&rs=' + escape(document.referer);	

	document.getElementById('create_map_link').href = strURL + '/create_new' + '?rs=' + escape(document.referrer);
	document.getElementById('disclaimer_link').onclick = function() { alert('DISCLAIMER: MapMyFitness.com and the author of this route\nmake no warranties as to the conditions, safety, distance\naccuracy, or suitability for walking, running, or cycling\nof this route. Walk, Run, or Ride at your own risk!'); };
	document.getElementById('embed_link').href = strURL + '/add_route_to_blog?r=' + route_key + '&rs=' + escape(document.referrer);


 	// Change Distance Intervals if Cycling
	if (route_type == 'ride') {
	    Style.MarkerDistanceImperial *= 5;
		Style.MarkerDistanceMetric *= 5;
	}
  
  	// Load Route Data
	var script=document.createElement('script');
	document.body.appendChild(script);
	//script.src = 'http://routes.mapmyrun.com/' + route_key + '.js';
	script.src = API_LINK + '/routes/get_route_json.php?' + _MMF_API_AUTH + '&r=' + route_key;
	window.setTimeout(function() {
		if(typeof(mmr_route_data) == 'undefined') {
			window.setTimeout(arguments.callee, 1000);
		} else {
			// Render Map
			var e = document.getElementById('map');
			map = new GMap2(e, {draggableCursor: 'crosshair', draggingCursor: 'hand'} );
			
			map.setCenter(new GLatLng(37.160317,-38.671875), 2); 
			
			map.addControl(new GLargeMapControl());

			setTimeout(function(){
				loadMap(route_key);
			}, 2500);
		
		}
	}, 1000);
	
	// Any special resizing
	if (self.innerHeight) // all except Explorer
	{
		intWindowWidth = self.innerWidth;
		intWindowHeight = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
	// Explorer 6 Strict Mode
	{
		intWindowWidth = document.documentElement.clientWidth;
		intWindowHeight = document.documentElement.clientHeight;
	}
	else if (document.body) // other Explorers
	{
		intWindowWidth = document.body.clientWidth;
		intWindowHeight = document.body.clientHeight;
	}
	
	// Small
	if (intWindowHeight == 450) {
		document.getElementById('map').style.height	= 200 + 'px';
		//alert(intWindowHeight + ":" + document.getElementById('map').style.height);
	}

	// Skinny + Long
	if (intWindowHeight == 500) {
		document.getElementById('map').style.height	= 320 + 'px';
		//alert(intWindowHeight + ":" + document.getElementById('map').style.height);
	}
		
	// Hiden Certain Elements
	if (intWindowWidth <= 700) {
		document.getElementById('optional_break').innerHTML = '<br/>';
	}
	
	 if (intWindowWidth <= 600) {
		document.getElementById('challenges_link').style.display = 'none';
		document.getElementById('register_image').style.display = 'none';
	}
	
	if (intWindowWidth <= 500) {
		document.getElementById('challenges_link').style.display = 'none';
		document.getElementById('community_link').style.display = 'none';
		document.getElementById('events_link').style.display = 'none';
		
		
		//document.getElementById('toggle_markers_link').innerHTML = 'Markers';
		document.getElementById('full_screen_link').innerHTML = 'View Full';
		
		if (intWindowWidth <= 350) { 
			document.getElementById('optional_break_2').innerHTML = '<br/>';
			document.getElementById('route_label').style.display = 'none';
			document.getElementById('location_label').style.display = 'none';
			}
	}
}

function loadMap(hex_route_key) {
	
	// Set Route Name
	var name = document.getElementById('name');
	name.innerHTML = stripslashes(mmr_route_data.route_name);
	
	// Set Location
	var strLocationLink = '';
	var loc = document.getElementById('location');
	loc.innerHTML = '';
	
	loc.innerHTML += mmr_route_data.city;
	strLocationLink += escape(mmr_route_data.city);
	
	if (mmr_route_data.state) {
		if (typeof(mmr_route_data.state != 'undefined') && mmr_route_data.state.length > 0) {
			loc.innerHTML += ', ' + mmr_route_data.state;
			strLocationLink = '/' + escape(mmr_route_data.state) + '/' + strLocationLink;
		}
	}
	
	if (mmr_route_data.country != 'us') {
		loc.innerHTML += mmr_route_data.country;
		strLocationLink = '/' + escape(mmr_route_data.country) + '/' + strLocationLink;
	}
	
	// Update Event Link
	document.getElementById('events_link').href = strURL + '/find-event' + strLocationLink + '?rs=' + escape(document.referrer);

	// Add Elevation Button
	 map.addControl(new ElevationButtonControl());

	// Render Map
	var kmlUrl = API_LINK + "/routes/get_route_kml?" + _MMF_API_AUTH + "&display_distance_marker_flag=0&display_custom_marker_flag=0&r=" + hex_route_key;
	
	var geoxml = new GGeoXml(kmlUrl, function() {
                var bounds = geoxml.getDefaultBounds();
                map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
        });
	
	map.addOverlay(geoxml);

	var pPrev;
	for(var i=0; i < mmr_route_data.points.length; i++) {
		var p = mmr_route_data.points[i];
		var point = new GLatLng(p.lat, p.lng);
		point.type = p.type;
		if(point.type > 1) {
			var mIcon = new GIcon(G_DEFAULT_ICON);
			mIcon.image = MarkerImagePrefix + Markers[point.type].filename;
			mIcon.shadow = null;
			mIcon.iconSize = new GSize(27, 29);
			mIcon.iconAnchor = new GPoint(13, 15);

			map.addOverlay(new GMarker(point, {icon: mIcon})); 
		}
		if(i > 0) {
			Distance += point.distanceFrom(pPrev); 
		}
		pPrev = point;
	}

	updateDistance();

}

function stripslashes(str) {
	str=str.replace(/\&/g,'&');
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\&/g,'\&');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\\\/g,'\\');
	str=str.replace(/\\0/g,'\0');
	return str;
}






