	
	//**********************************************
	//   ThePortYahooMap.js
	//**********************************************
	
	var tp_mapDiv = "tp_mapContainer";
    var tp_mapContainer = null;    
	var tp_mapIndex = 0;
	var tp_mapAddresses = null;
	var tp_mapAddrType = 0;
	
	function tp_map_load(lat,lon){
	  	tp_mapContainer = new YMap(document.getElementById(tp_mapDiv),YAHOO_MAP_REG);
		tp_mapContainer.addTypeControl();		
		var pp = new YCoordPoint(6,7);
		pp.translate('left','top');		
		tp_mapContainer.addPanControl(pp);		
		pp = new YCoordPoint(18,59);
		pp.translate('left','top');
		tp_mapContainer.addZoomShort(pp);
		var desc = (tp_mapAddrType==0)? tp_eventTitle : tp_mapAddresses[tp_mapIndex].description;
	    var mydefaultPoint = new YGeoPoint(lat,lon);
		tp_mapContainer.drawZoomAndCenter(mydefaultPoint,5);
	    tp_mapContainer.disableKeyControls();	   
        var marker = tp_map_CreateMarker(mydefaultPoint,desc);        
        tp_mapContainer.addOverlay(marker);            
    };	
    function tp_map_AddMarker(lat,lon){
        var marker = tp_map_CreateMarker(new YGeoPoint(lat,lon),tp_mapAddresses[tp_mapIndex].description);
        tp_mapContainer.addOverlay(marker);
    };
	function tp_map_CreateMarker(geoPoint,desc){
        var img = new YImage();
        img.src = 'http://modules.portspaces.com/custom/modules/images/balloon3.png';
        img.size = new YSize(20,34);
        img.offsetSmartWindow = new YCoordPoint(10,30);
        var m = new YMarker(geoPoint,img);
        m.setSmartWindowColor('grey');
        YEvent.Capture(m, EventsList.MouseClick, function(){
			m.openSmartWindow('<div class="map-smartwindow">' + desc + '</div>');
			tp_mapContainer.panToLatLon(geoPoint);});
        return m;
	};
	function tp_map_setZoomLevel(input){
	    if(input==null){
	        alert('Invalid zoom level argument!');
	        return;
	    }	   
	    tp_mapContainer.setZoomLevel(input);	        
	};
	function tp_map_getZoomLevel(){
	    return tp_mapContainer.getZoomLevel();
	};
	YGeoCode={
	  getPoint:function(d){ 	  
	    if(tp_mapContainer != null){tp_map_AddMarker(d.GeoPoint.Lat,d.GeoPoint.Lon);}
	    else{tp_map_load(d.GeoPoint.Lat,d.GeoPoint.Lon);}
	    if(tp_mapAddrType==0)return;
	    tp_mapIndex++;
	    if(tp_mapIndex >= tp_mapAddresses.length)return;	  
	    setTimeout(function(){tp_map_geoCodeAddress(tp_mapAddresses[tp_mapIndex].address)},0);
	  }
	};	
	var tp_mapRequestId = 0;
	function tp_map_geoCodeAddress(address) {
	  tp_mapRequestId++;
	  var head = document.getElementsByTagName("head")[0];
	  script = document.createElement('script');
	  script.id = 'geocode'+tp_mapRequestId;
	  script.type = 'text/javascript';
	  script.src = "http://api.maps.yahoo.com/ajax/geocode?appid=batchGeocode&qt=3&id="+tp_mapRequestId+"&qs="+encodeURI(address);
	  head.appendChild(script);	  
      script.onreadystatechange=function(){
		if (this.readyState == 'complete') {	
			document.getElementsByTagName('head')[0].removeChild(this);
		}
      }
      script.onload=function(){
        document.getElementsByTagName('head')[0].removeChild(this);
      }
	};
    function tp_map_findLocation(obj){
      if(obj == null)return;
	  if(typeof(obj)=='string' && obj.length>0){
	    tp_map_geoCodeAddress(obj);		
		return;
	  }
	  tp_mapAddresses = tp_map_mergeAddressDetails(obj.AddressDetails);
	  if(tp_mapAddresses == null || tp_mapAddresses.length == 0)return;
	  tp_mapAddrType = 1;
	  tp_map_geoCodeAddress(tp_mapAddresses[tp_mapIndex].address);
    };	
	function tp_map_mergeAddressDetails(objAD){
	  var AD=objAD;var _AD=[];var adDesc='';
	  AD.sort(tp_map_sortByAddress);	 
	  for(var i=0;i<objAD.length;i++){
	    if(i==0){adDesc=AD[i].description;_AD.push(AD[i]);}	    
		if((i+1)!=objAD.length){
		  if(AD[i].address==AD[(i+1)].address){		  
		   adDesc += '<br /><br />' + AD[(i+1)].description;
		   if((i+2)==objAD.length){			  
		     AD[i].description=adDesc;
			  _AD.push(AD[i]);
			}
		  }else{
		    AD[i].description=adDesc;
			_AD.push(AD[i]);
			adDesc=AD[(i+1)].description;
			if((i+2)==objAD.length){_AD.push(AD[(i+1)]);}
		  }
	    }
	  }return _AD;
	};
	
	function tp_map_sortByAddress(a, b){
	  var x = a.address.toLowerCase();
	  var y = b.address.toLowerCase();
	  return ((x<y)?-1:((x>y)?1:0));
    };	
	
	function AddressDetails(address, description){ 
	  this.address=address;this.description=description;  
	};
