//Msn.VE.API.Globals.vedebug = false;
var map = null;
var hotelLayer = null;
var polygonLayer = null;
var landmarkLayer = null;
var earthRadius = 6371;
var searchRadius = 4.8;
var originHotel="";
var useWalking = false;
var globalLng = "";
var multiPoints = new Array();

//var enviroment = "local";
var enviroment = "production";
//var enviroment = "staging";

loadVEControl();

Msn.VE.API.Globals.vecurrentsearchindex=1;

function loadVEControl()
{
/*	var locale = window.location.search;
	var path = window.location.pathname;
	var lng="";
	
	if(locale==null||locale=="")
	    lng="en-US";
	else if(locale.match("lng=fr-fr")||locale.match("lng=fr-FR"))//French - Franch
		lng="fr-FR";
	else if(locale.match("lng=fr-ca")||locale.match("lng=fr-CA"))//French - Canadian
		lng="fr-CA";
	else if(locale.match("lng=it-it")||locale.match("lng=it-IT"))//Italian
		lng="it-IT";
	else if(locale.match("lng=da-dk")||locale.match("lng=da-DK"))//Danish
		lng="da-DK";
	else if(locale.match("lng=nl-nl")||locale.match("lng=nl-NL"))//Dutch
		lng="nl-NK";
	else if(locale.match("lng=es-es")||locale.match("lng=es-ES"))//Spanish
		lng="es-ES";
	else if(locale.match("lng=cs-cz")||locale.match("lng=cs-CZ"))//Czech
		lng="cs-CZ";
	else if(locale.match("lng=fi-fi")||locale.match("lng=fi-FI"))//Finnish
		lng="fi-FI";
	else if(locale.match("lng=de-de")||locale.match("lng=de-DE"))//German
		lng="de-DE";
	else if(locale.match("lng=pt-br")||locale.match("lng=pt-BR"))//Portuguese - Brazil
		lng="pt-BR";
	else if(locale.match("lng=nb-no")||locale.match("lng=nb-NO"))//Norwegian
		lng="nb-NO";
	else if(locale.match("lng=pt-pt")||locale.match("lng=pt-PT"))//Portuguese - Portugal
		lng="pt-PT";
	else if(locale.match("lng=sv-se")||locale.match("lng=sv-SE"))//Swedish
		lng="sv-SE";
	else
	    lng="en-US";
	
	globalLng = "&lng="+lng;
	
	if(path.match(/MapResults.aspx/i)||path.match(/PrxDriveResults.aspx/i)||path.match(/tripinput.aspx/i))
	{
		var url = "http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1&mkt="+lng;
		var e = document.createElement("script");
			e.src = url;
			e.type="text/javascript";
			document.getElementsByTagName("head")[0].appendChild(e); 
	}*/
}

function ApplyResults(index, cityResults, proxyResults)
{
		ApplyResultsMWS(null,cityResults,proxyResults,null,null,null,null,null,null);
		
		if(cityResults+proxyResults==1)
		{
			var landmarkEl = document.getElementById( "chkLandmarks" );
		
			if(!landmarkEl.checked)
				landmarkEl.checked=true;
			
			ShowLandmarks( map.GetCenter().Latitude, map.GetCenter().Longitude );
			polygonLayer.AddShape(generateCircle(map.GetCenter(), searchRadius));
		}
}

function MyBeginInvoke(Ht,It,Jt,Kt){
	if(this.ServiceUrl==null||this.ServiceUrl=="undefined"||this.ServiceUrl.length==0)
		throw new VEException("VENetwork:BeginInvoke","err_noserviceurl",L_noserviceurl_text);
	//if(Msn.VE.API.Globals.veonbegininvokeevent)
		//Msn.VE.API.Globals.veonbegininvokeevent();
	var executionid=VENetwork.GetExecutionID();
	if(It){
		var methodurl=this.ServiceUrl+"?";
		for(var i=0;i<It.length;i++){
			methodurl=methodurl+It[i].Name;
			methodurl=methodurl+"=";
			methodurl=methodurl+It[i].Value;
			methodurl=methodurl+"&";
		}
	}else
		var methodurl=this.ServiceUrl;
	var elScript=document.createElement("script");
	elScript.type="text/javascript";
	elScript.language="javascript";
	elScript.id=executionid;
	elScript.src=methodurl;
	if(navigator.userAgent.indexOf("IE")>=0)
		elScript.onreadystatechange=function(){
			if(elScript&&("loaded"==elScript.readyState||"complete"==elScript.readyState)){
				elScript.onreadystatechange=null;
				EndInvoke(Kt,Jt,Ht,elScript,executionid);
			}
		};
	else
		elScript.onload=function(){
			elScript.onload=null;
			EndInvoke(Kt,Jt,Ht,elScript,executionid);
		};
	VENetwork.GetAttachTarget().appendChild(elScript);
}

VENetwork.prototype.BeginInvoke=MyBeginInvoke;

function EndInvoke(Lt,Mt,Nt,Ot,Pt){
	var objects=null;
	if(Nt){
		eval("objects = "+Nt+"();");
	}
	document.getElementsByTagName("head")[0].removeChild(Ot);
	Ot=null;
	if(Mt!=null&&Mt!="undefined") {
		Mt(objects,Lt);
	}
	//if(Msn.VE.API.Globals.veonendinvokeevent)
	//	Msn.VE.API.Globals.veonendinvokeevent();
}

// Map Initization method called onLoad for the page
function InitMap() {
	tabberAutomatic(tabberOptions);
	map = new VEMap('mymapcontroldiv');
	map.SetClientToken(token);
	map.LoadMap();
	map.EnableShapeDisplayThreshold(false);
	document.getElementById('MSVE_obliqueNotification').style.visibility = "hidden";
	
	//turn on printing options
	var printOpt = new VEPrintOptions(true);
    map.SetPrintOptions(printOpt);
	
	landmarkLayer = new VEShapeLayer();
	map.AddShapeLayer(landmarkLayer);
	
	polygonLayer = new VEShapeLayer();
	map.AddShapeLayer(polygonLayer);
	
	hotelLayer = new VEShapeLayer();
	map.AddShapeLayer(hotelLayer);
	
	map._sm._ApplyResults = ApplyResultsMWS;
	if( document.getElementById( "txtCity" ).value != ""
			|| document.getElementById( "listStates" ).selectedIndex > 0 ) {
		DoFind();
	} else {
		ShowSearchPanelAndMap();
	}
}

function LoadBidData()
{
if( document.getElementById( "hdnBID" ).value != "" ) {
	var bid = document.getElementById( "hdnBID" ).value;
	DoFindBIDs( bid);
	}
	else {
		MapNotFound();
	}
}

function CalculateMapView(hotels,locs)
{
	var maxLat =-90; 
	var minLat =90;
	var maxLong =-180; 
	var minLong =180;
  
    for(var i=0;i<locs.length;i++)
    {
		if(locs[i].Latitude>maxLat)
		{
			maxLat = locs[i].Latitude;
		}
		
		if(locs[i].Latitude<minLat)
		{
			minLat = locs[i].Latitude;
		}
		
		if(locs[i].Longitude>maxLong)
		{
			maxLong = locs[i].Longitude;
		}
		
		if(locs[i].Longitude<minLong)
		{
			minLong = locs[i].Longitude;
		}
    }
  
	//default zoom scales in km/pixel from http://msdn2.microsoft.com/en-us/library/aa940990.aspx
	var defaultScales = new Array(78.27152,39.13576,19.56788,9.78394,4.89197,2.44598,1.22299,0.61150,0.30575,0.15287,.07644,0.03822,0.01911,0.00955,0.00478,0.00239,0.00119,0.0006,0.0003);

	//calculate center coordinates
	var centerLat = (maxLat + minLat)/2;
	var centerLong = (maxLong + minLong)/2;
	var centerPoint = new VELatLong(centerLat,centerLong);

	//want to calculate the distance in km along the centers latitude between the two longitudes
	var meanDistanceX = distance(centerLat,minLong,centerLat,maxLong);

	//want to calculate the distance in km along the centers longitude between the two latitudes
	var meanDistanceY = distance(maxLat,centerLong,minLat,centerLong)*2;

	//dimensions of the map - need to remove px or percentage and convert to int
	var mapWidth = parseFloat(document.getElementById('mymapcontroldiv').style.width);
	var mapHeight = parseFloat(document.getElementById('mymapcontroldiv').style.height);

	//calculates the x and y scales
	var meanScaleValueX = meanDistanceX/mapWidth;
	var meanScaleValueY = meanDistanceY/mapHeight;

	var meanScale;

	//gets the largest scale value to work with
	if(meanScaleValueX > meanScaleValueY)
		meanScale = meanScaleValueX;
	else
		meanScale = meanScaleValueY;

	//intialize zoom level variable
	var zoom = 1;

	if(1==locs.length) //workaround for a result length of one
	{
		centerPoint.Latitude = locs[0].Latitude;
		centerPoint.Longitude = locs[0].Longitude;
		zoom = 12;
		InitLocationMap(hotels,centerPoint,zoom);
	}
	else
	{
	//calculate zoom level
	for(var i=2;i<19;i++)
	{
		if(meanScale>=defaultScales[i])
		{
			zoom = i;
			InitLocationMap(hotels,centerPoint,zoom);
			break;
		}
	}
	}
}

//this function calculates the distance between two coordinates
function distance(lat1,lon1,lat2,lon2)
{
	var earthRadius = 6371;
	var factor = Math.PI/180;
	var dLat = (lat2-lat1)*factor;
	var dLon = (lon2-lon1)*factor; 
	var a = Math.sin(dLat/2) * Math.sin(dLat/2)+Math.cos(lat1*factor)*Math.cos(lat2*factor)*Math.sin(dLon/2) * Math.sin(dLon/2); 
	var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
	var d = earthRadius * c;
	
	return d;
}

function InitLocationMap(hotels,center,zoom) {
	//if( document.getElementById( "hdnBID" ).value != "" ) {
	//var bid = document.getElementById( "hdnBID" ).value;

	map = new VEMap('mymapcontroldiv');
	map.SetClientToken(token);		

	map.LoadMap(center, zoom);
		map.EnableShapeDisplayThreshold(false);
	document.getElementById('MSVE_obliqueNotification').style.visibility = "hidden";

	//turn on printing options
	var printOpt = new VEPrintOptions(true);
	map.SetPrintOptions(printOpt);

	landmarkLayer = new VEShapeLayer();
	map.AddShapeLayer(landmarkLayer);
	
	polygonLayer = new VEShapeLayer();
	map.AddShapeLayer(polygonLayer);
	
	hotelLayer = new VEShapeLayer();
	map.AddShapeLayer(hotelLayer);
	
	var hotelData = new Array();
	
	for(var i=hotels.length-1; i>=0; i--) //reverse pin display order, it's for overlapping pins
	//for(var i=0;i<hotels.length;i++)
	{
		var pushpin=new VEShape(VEShapeType.Pushpin,new VELatLong(hotels[i].latitude,hotels[i].longitude));
		pushpin.SetTitle(hotels[i].name);
		pushpin.SetCustomIcon(hotels[i].icon);
		pushpin.SetDescription(hotels[i].description);
		hotelData.push(pushpin);
	}
	hotelLayer.AddShape(hotelData);
	
//	map._sm._ApplyBIDResultsMWS = ApplyBIDResultsMWS;
	
	//DoFindBIDs( bid);
	//} else {
	//	MapNotFound();
	//}
}

function InitRouteMap() {
	document.getElementById( "routeMap" ).style.height = "400px";
	document.getElementById( "routeMap" ).style.width = "600px";
	
	var search = window.location.search;
	if(search.match("&searchType=walk"))
		useWalking=true;
	
	map = new VEMap('routeMap');
	map.SetClientToken(token);
	map.LoadMap();
	map.EnableShapeDisplayThreshold(false);
	document.getElementById('MSVE_obliqueNotification').style.visibility = "hidden";
	
	//turn on printing options
	var printOpt = new VEPrintOptions(true);
    map.SetPrintOptions(printOpt);
	
	polygonLayer = new VEShapeLayer();
	map.AddShapeLayer(polygonLayer);
	
	hotelLayer = new VEShapeLayer();
	map.AddShapeLayer(hotelLayer);
	//map.HideDashboard();
}

function CheckTripFields()
{
	var fieldSet = false;
	if( (document.getElementById( "controlAddressOrigin_txtStreet" ).value != "")
		|| (document.getElementById( "controlAddressOrigin_txtAd3" ).value != "")
		|| (document.getElementById( "controlAddressDestination_txtStreet" ).value != "")
		|| (document.getElementById( "controlAddressDestination_txtAd3" ).value != "")
		)
		{
			fieldSet = true;
		}
	if( fieldSet )
	{
		document.getElementById( "routeGenerating" ).style.display = "";
		document.getElementById( "routeGenerating" ).style.visibility = "visible";
		GeocodeTrip( false, false );
		return;
	}

	var listAirportOrigin = document.getElementById( "controlAddressOrigin_selectAirport" );
	var listAirportDest = document.getElementById( "controlAddressDestination_selectAirport" );
	if( (listAirportOrigin.selectedIndex != 0) || (listAirportDest.selectedIndex != 0) )
	{
		fieldSet = true;
	}
	if( fieldSet )
	{
		document.getElementById( "routeGenerating" ).style.display = "";
		document.getElementById( "routeGenerating" ).style.visibility = "visible";
		GeocodeTrip( false, false );
		return;
	}
	document.getElementById( "tripInput" ).style.display = "";
	document.getElementById( "tripInput" ).style.visibility = "visible";
}

//function onMapClick(e) {
	//map.SetCenter( e.View.LatLong );
//}