BingPOI = {};

(function () {

	BingPOI.Map = function(bingPOIObjName,BingDirectionMapObj,BingRouteMapObj)
	{
		var planes = "PLANES";
		var buses = "BUSES";
		var boats = "BOATS";
	//	var subway = "SUBWAY";
		var trains = "TRAINS";

		var trainImgUrl = "";
		var ferryImgUrl = "";
		var busImgUrl = "";
	/*	var subwayImgUrl = "";*/
		var airportImgUrl = "";
		var Ctyhocn = null;
		
		var bingDirectionMapObj = BingDirectionMapObj;
		var bingRouteMapObj = BingRouteMapObj;
		var bingPOIObjNameStr = bingPOIObjName;
		var map = null; 
		var layerArray = new Array();
		//var nameArray = [planes,buses,boats,subway,trains];
		var nameArray = [planes,buses,boats,trains];
		var isInitialized = false;

		var JsonObj=null;

		var init = function()
		{
			map = Bing_Map.getMapObj();
			var i=0;
			var layer=null;
			for(i=0;i<nameArray.length;i++){
			
				layer = new VEShapeLayer();
				layer.SetTitle(nameArray[i]);
				map.AddShapeLayer(layer);
				layer.Hide();
				layerArray[i]=layer;
			}
			isInitialized = true;


			trainImgUrl = document.getElementById("trainPath").value;
			ferryImgUrl = document.getElementById("ferryPath").value;
			busImgUrl = document.getElementById("busPath").value;
			/*subwayImgUrl = document.getElementById("subwayPath").value;*/
			airportImgUrl = document.getElementById("airportPath").value;

		};

		// initialize variables

		var findLayer=function(type)
		{
			
			var layer = null;
			switch(type)
			{
			case "PLANES":
				layer = layerArray[0];
				break;
			case "BUSES":
				layer = layerArray[1];
				 break;
			case "BOATS":
				layer = layerArray[2];
				break;
			/*case "SUBWAY":
				layer = layerArray[3];
				break;*/
			case "TRAINS":
				layer = layerArray[3];
				break;
			default:
				layer = null;
				break;
			}
			return layer;
		};

		var getImgUrl=function(type)
		{	
			var imgUrl="";
			
			switch(type)
			{
			case "PLANES":
				imgUrl= airportImgUrl;
				break;
			case "BUSES":
				imgUrl= busImgUrl;
				 break;
			case "BOATS":
				imgUrl= ferryImgUrl;
				break;
		/*	case "SUBWAY":
				imgUrl= subwayImgUrl;
				break;*/
			case "TRAINS":
				imgUrl=trainImgUrl;
				break;
			default:
				imgUrl = "";
				break;
			}
			
			return imgUrl;
		};

		 // debugging
		var debug = function (str){
				document.getElementById("output").innerHTML=str;
		};

		// passing an array of strings and returned a joined string
		var appendStrings = function(list){
		    this.buffer = [];
			var i =0;
			for (i=0;i<list.length;i++){
				buffer.push(list[i]);
			}
			return buffer.join("");
		 };


		// trim the white space
		 var trim = function(string) {
			return string.replace(/^\s*/, "").replace(/\s*$/, "");
		 };


		var reset = function(){
				//bingDirectionMapObj.resetZoom();
				bingDirectionMapObj.resetMap();
				resetMapView();
		};

		var resetMapView =function(){
			var latLongArray = bingDirectionMapObj.getLatLongArray();
			var newArray = new Array();
			var index = 0;
			var j=0;
			var max=0;
			if (latLongArray.length>4)
			{
				max=4
			} else{
				max = latLongArray.length;
			}
			
			for (j=0;j<max;j++)
			{
				newArray[j]=latLongArray[j];
				index++;
			}

			if(JsonObj!=null || typeof JsonObj !="undefined"){
			
			var navContent = eval(JsonObj);
											
				if(navContent!=null && navContent!="undefined")	
					for (i = 0; i < navContent.length; i++) 
					{
						if(typeIsChecked(navContent[i].type))
						{
							hotelLatLong = new VELatLong(navContent[i].address.latLong.latitude,navContent[i].address.latLong.longitude, 0, VEAltitudeMode.RelativeToGround);
							newArray[index] = hotelLatLong;
							index++;
						}
					}
			}

			var map = bingDirectionMapObj.getMapObj();
			map.SetMapView(newArray);
		};
		
		var typeIsChecked=function(type){
			var arrayOfCheckBoxes = document.getElementsByName('poi');
			var isChecked = false
			for(var i = 0; i < arrayOfCheckBoxes.length; i++)
			{
				var element = document.getElementsByName('poi').item(i);
				if (element.checked && type == element.value)
				{
					return true;
				}
			}
			return false;
			
		};

		return {

			getName:function()
			{
				return bingPOIObjNameStr;
			},
			
			addPOIs:function(newJsonObj)
			{
				if (!isInitialized){
						init();
					}
				JsonObj = newJsonObj;
						
				var navContent = eval(JsonObj);
				var latLongArray = bingDirectionMapObj.getLatLongArray();

				hotelLat = latLongArray[0].Latitude;
				hotelLong = latLongArray[0].Longitude;
				
				if(navContent!=null && navContent!="undefined")				
					for (i = 0; i < navContent.length; i++) {				
						var type = navContent[i].type;
						var name = navContent[i].name;						
						var esname = escape(name);
						var longi = parseFloat(navContent[i].address.latLong.longitude);
						var lati = parseFloat(navContent[i].address.latLong.latitude);
						var city = navContent[i].address.city;
						var postcode = navContent[i].address.postalCode;
						var countrycode = navContent[i].address.countryCode;
						
						var description = "<div class=\" vcard\"><h4 class=\"mapPopPOIName fn org\">"+name+"</h4><br/>"+"<span class=\"adr\">" + navContent[i].address.addressLine+ "</span>";
						description += "<span class=\"mapPopPOILocale locale\">" + navContent[i].address.city;					
						description += "," + navContent[i].address.postalCode + "," + navContent[i].address.countryCode + "</span></div><br/>";										
						description += '<p>'+jQuery('#poiGetDir').val()+"<a onclick=\""+bingRouteMapObj.getName()+".getDirectionsWithLatLong('"+esname+"','1',"+hotelLat+","+hotelLong+","+navContent[i].address.latLong.latitude+","+navContent[i].address.latLong.longitude+");\" href=\"#\">"+jQuery('#poiToHere').val()+"</a> ";
						description += "- <a onClick=\""+bingRouteMapObj.getName()+".getDirectionsWithLatLong('"+esname+"','2',"+lati+","+longi+","+hotelLat+","+hotelLong+");\" href=\"#\">"+jQuery('#poiFromHere').val()+"</a></p>";
						
						Bing_POI.addPOI(type,name,lati,longi,getImgUrl(type),description);
					}							
			},

			addPOI:function(PoiType, PoiName, PoiLat, PoiLong, PoiImgUrl, PoiDescription)
			 {

				if (!isInitialized){
					init();
				}

				var layer = findLayer(PoiType);

				var index = bingDirectionMapObj.getListIndex();
				if(layer!=null){
					bingDirectionMapObj.addPoiData(PoiName,PoiLat,PoiLong,PoiImgUrl,PoiImgUrl,PoiDescription);
					bingDirectionMapObj.addItemToMap(index,layer);
				}
			 },
			 
			 addPOIsToMap:function(Ctyhocn){

			 MappingUtils.getPointsOfInterest(Ctyhocn, 3, { callback:Bing_POI.addPOIs, timeout:30000 } );
			 },

			enablePOIS:function(obj)
			{			
				var type = obj.value;			
				if (type)
				{
					var layer = findLayer(type);
					if (obj.checked)
					{
						reset();
						layer.Show();
					} else {
						reset();
                       var latLongArray =bingDirectionMapObj.getLatLongArray();
						if(latLongArray.length==1){
							//map.SetZoomLevel(10);							
							var checked2 = false;
							jQuery(".radio").each(function(){
							if(checked2 != true){
							 		checked2 = jQuery(this).attr('checked');
							 		}
   								 		
   								 });
   								 
   								 if(checked2 != true) {map.SetCenterAndZoom(latLongArray[0], 15);}
							}
							else {
									var checked2 = false;
									jQuery(".radio").each(function(){
									if(checked2 != true){
							 				checked2 = jQuery(this).attr('checked');
							 				}
   								 		
   										 });
   								
   								 	if(checked2 != true) {map.SetCenter(latLongArray[0]);}
							}
							
						layer.Hide();
					}
				}
			}
 		};// closing return block

	};// constructor with private methods


})();
