var MapquestGeocodeBase = "http://www.mapquestapi.com/geocoding/v1/address?key=Gmjtd%7Clu61200ynd%2Cb0%3Do5-lwtnl&outFormat=json&inFormat=json&json=";
var MapquestCallbackPrefix = "&callback=";
var orig = null;
var dest = null;
var sessId;
var boundingBox;
var toFac = true;
var lpad = 0;
var rpad = 0;
var tpad = 0;
var bpad = 0;
var mapSize = new MQA.Size();
var windowHeight;
var windowWidth;
var mapHeight;
var mapWidth;
var mapDivHeight;
var mapDivWidth;
var addrPad;
var mapPad;
var origHtml;
var title;

function readyPage()
{		
	$("#print").click(printPage);
	$("#print").mouseenter(showPointer);
	$("#print").mouseleave(showDefault);
	$("#close").click(closePage);
	$("#close").mouseenter(showPointer);
	$("#close").mouseleave(showDefault);
	
	var url = location.search;
	title = $.query.get("name");
	var street1 = $.query.get("address");	
	var street2 = $.query.get("address2");
	var city = $.query.get("city");
	var state = $.query.get("stateProvince");
	var zip = $.query.get("postalCode");
	var phn = $.query.get("phone");
	var entLat = $.query.get("lat").toString();
	var entLng = $.query.get("lng").toString();
	var address1 = new Object();
	address1.addressLine1 = street1;
	address1.addressLine2 = street2;
	address1.city = city;
	address1.state = state;
	address1.postalCode = zip;
	address1.phone = phn;
	window.address1 = address1;
	
	//$(window).resize(sizeMap);
  //$("#addrInfo").resize(sizeMap);
	
	if(entLat!=null)
		entLat = entLat.replace(/^\s*/,"");
	if(entLng!=null)
		entLng = entLng.replace(/^\s*/,"");
	
	origHtml = "<strong>";
	if(title!=null&&title.length>0)
		origHtml = origHtml + title + "<br/>"
	if(street1!=null&&street1.length>0)
	  origHtml += (street1 + "<br/>");
	if(street2!=null&&street2.length>0)
		origHtml += (street2 + "<br/>");
	if((city!=null&&city.length>0)&&(state!=null&&state.length>0)&&(zip!=null&&zip>0))
	{
		origHtml += (city + ", "+state+" "+zip+"<br/>");
	}
	else
	{
		var cityStateZip = "";
		if(city!=null&&city.length>0)
		{
			cityStateZip = city;
		}
		if(state!=null&&state.length>0)
		{
			if(cityStateZip.length>0)
			{
				cityStateZip += (", " + state);
			}
			else
			{
				cityStateZip = state;
			}
		}
		if(zip!=null&&zip>0)
		{
			if(cityStateZip.length>0)
			{
				cityStateZip += (" "+zip);
			}
			else
			{
				cityStateZip = zip.toString();
			}
		}
		if(cityStateZip.length>0)
		{
			origHtml += (cityStateZip+"<br/>");
		}		
	}	
	
	if(phn!=null&&phn.length>0)
		origHtml += (phn + "<br/>");
	origHtml += "</strong>";
	
	
	$("#origDiv").html(origHtml);
	if(entLat==null||entLat.length==0||entLng==null||entLng.length==0)
	{
					
		doGeoCode(window.address1, "displayInitialMap");		
	}
	else
	{
		window.address1.latLng = new Object();
		window.address1.latLng.lat = entLat;
		window.address1.latLng.lng = entLng;
		renderInitialMap();		
	}
	$("#directionsLink").click(handleClick);
	$("#route").click(doDirections);
	$("#reverseDir").click(reverseDirections);
}

function handleClick()
{
	if($("#destDiv").hasClass("filtered"))
		$("#destDiv").removeClass("filtered");
	else
		$("#destDiv").addClass("filtered");
	toFac = true;
	return false;
}


function printDirs(rt)
{	
	var routeTotalTime = rt.formattedTime;
	var routeDist = rt.distance;		
	var trkColl = rt.legs;
	var maneuverColl = trkColl[0].maneuvers;
	var trkStr = "<ul>";
	for(x=0;x<maneuverColl.length;x++)
	{
		manDist = ((Math.round(maneuverColl[x].distance)*100)/100);
		manStr = (x+1) + ". " + maneuverColl[x].narrative + 
		  "(Distance: "+ manDist + " mi)";
		if(x==0)
		{
			trkStr = trkStr + "<li class='begin'>";
		}
		else if(x==(maneuverColl.length-1))
		{
			trkStr = trkStr + "<li class='end'>";
		}
		else
		{
			trkStr = trkStr + "<li>";
		}
		trkStr = trkStr + manStr + "</li>";
	}
	trkStr = trkStr + "</ul>";
	if(trkStr.indexOf("<li")>-1)
	{
	  $("#directions").html(trkStr);
	}
}

function getDestAddr()
{
	var street = $.trim($("#destStreet").val());
	var city = $.trim($("#destCity").val());
	var state = $.trim($("#destState").val());
	var zip = $.trim($("#destZip").val());
	if((city==null||city.length==0||state==null||state.length==0)&&(zip==null||zip.length==0))
	{		
	  throw new Error("You must have either city and state, or zip code to get driving directions");
	}
	else
	{
		var address2 = new Object();
		address2.street1 =street;
		address2.city = city;
		address2.state = state;
		address2.country = "US";
		address2.postalCode = zip;		
		return address2;
	}
}

function reverseDirections()
{
	toFac = !toFac;
	renderRoute();
	return false;
}

function sizeMap()
{	
	if(mapSize==null)
	{
	  mapSize = new MQA.Size();
	}
	mapSize.setWidth(1);
	mapSize.setHeight(1);	
	lpad = $("#mapDiv").outerWidth(true)-$("#mapDiv").innerWidth();
  tpad = $("#mapDiv").outerHeight(true)-$("#mapDiv").innerHeight();    
	windowHeight = $(window).height()-30;
  windowWidth = $(window).width()-10;    
  addrHeight = $("#addrInfo").height()+$("#widgets").height();
  mapDivHeight = windowHeight-(addrHeight+tpad);
	mapDivWidth = windowWidth-lpad;
	mapWidth = mapDivWidth;// - lpad;
	mapHeight = mapDivHeight;// - tpad;
	$("#mapDiv").height(mapDivHeight);
  $("#mapDiv").width(mapDivWidth);
  $("#main").height(windowHeight);			 	   
	$("#main").width(windowWidth);	
	mapSize.setWidth(mapWidth);
	mapSize.setHeight(mapHeight);
	if(window.map)
  {		
		window.map.setSize(mapSize);
  }
}

function closePage()
{
	window.close();
}

function printPage()
{
	window.print();
}

function showPointer()
{
	$(this).addClass("pointer");
}

function showDefault()
{
	$(this).removeClass("pointer");
}

function doGeoCode(address, mapFunction)
{
	var req = MapquestGeocodeBase;
	var addr ='{location:{street:"';
	if(address.street1!=null&&address.street1.length>0)
	{
		addr = addr+address.street1;
		addr = addr+" ";
	}
	if(address.street2!=null&&address.street2.length>0)
	{
		addr = addr+address.street2;
		addr = addr+" ";
	}
	if(address.city!=null&&address.city.length>0)
	{
		addr = addr+address.city;
		addr = addr+", ";
	}
	if(address.state!=null&&address.state.length>0)
	{
		addr = addr+address.state;
		addr = addr+" ";
	}
	if(address.postalCode!=null&&address.postalCode.length>0)
	{
		addr = addr+address.postalCode;
	}
	
	addr = addr+'"},options:{thumbMaps:false,maxResults:1}}';	
	req = req + addr;
	req = req + MapquestCallbackPrefix;
	req = req + mapFunction;
	var script = document.createElement('script');
	script.type = 'text/javascript';		
	script.src = req;
	document.body.appendChild(script); 
}


function renderInitialMap()
{
	if($("#mapDiv").height()==0)
	{
		$("#mapDiv").height(100);
	}
	if($("#mapDiv").width==0)
	{
		$("#mapDiv").width(100);
	}	
	sizeMap();
	window.map = new MQA.TileMap(document.getElementById('mapDiv'),
      11,
      {lat:window.address1.latLng.lat,lng:window.address1.latLng.lng},
      'map');
		
	addPoi({lat:window.address1.latLng.lat,lng:window.address1.latLng.lng},
	title,origHtml,window.map);
	MQA.withModule('zoomcontrol3',function()
			                          {
																	window.map.addControl(
																			                  new MQA.LargeZoomControl3(),
																			                  new MQA.MapCornerPlacement(MQA.MapCorner.TOP_LEFT));
			                          });
	MQA.withModule('viewcontrol3',function()
      {
				window.map.addControl(
						                  new MQA.ViewControl3(),
						                  new MQA.MapCornerPlacement(MQA.MapCorner.TOP_RIGHT));
      });
}

function displayInitialMap(data)
{
	window.address1.latLng = new Object();
	window.address1.latLng.lat = data.results[0].locations[0].latLng.lat;
	window.address1.latLng.lng = data.results[0].locations[0].latLng.lng;
	renderInitialMap();
}

function addPoi(latLng, title, address, map)
{
	var poi = new MQA.Poi(latLng);	
	if(title!=null&&title.length>0)
	{
		poi.setInfoTitleHTML(title);
	}		
	poi.setInfoContentHTML(address);
	map.addShape(poi);
}

function doDirections()
{
	try
	{		
		toFac = true;
		addr = getDestAddr();
		window.address2 = addr;
		if(window.address1==null||window.address2==null)
		{
			return false;
		}
		if(!window.address2.latLng||!window.address2.latLng.lat)
		{
			doGeoCode(window.address2,"mapRoute");
		}
	}
	catch(e)
	{
		alert(e.message);
	}
	return false;
}

function runDirections(data)
{		
	if(data.route)
	{
		printDirs(data.route);
	}
}

function mapRoute(data)
{
	window.address2.latLng = new Object();
	window.address2.latLng.lat = data.results[0].locations[0].latLng.lat;
	window.address2.latLng.lng = data.results[0].locations[0].latLng.lng;
	window.map.removeAllShapes();
	renderRoute();
}

function renderRoute()
{
	var rt = new Array();
	if(window.address1&&window.address1.latLng&&window.address1.latLng.lat&&window.address2&&window.address2.latLng&&window.address2.latLng.lat)
	{
		if(toFac)
		{
			rt[0] = window.address2;
			rt[1] = window.address1;
		}
		else
		{
			rt[0] = window.address1;
			rt[1] = window.address2;
		}
		MQA.withModule('directions',function()
				                        {
																	window.map.addRoute([
																	                     {latLng:{lat:rt[0].latLng.lat, lng:rt[0].latLng.lng}},
																	                     {latLng:{lat:rt[1].latLng.lat, lng:rt[1].latLng.lng}}],{},runDirections)
																});
	}
}
