﻿var _rcMap=null;var _rcAccommodationIcon=null;
var _rcMapIconBasePath="http://www.visitshanklin.co.uk/mapicons/";
var _rcMeasureIcon=null;_rcMeasureMarkers=new Array();
var _rcItemPane=null;var _rcMapControlPane=null;var _rcHelpPane=null;
var _rcMeasure=null;var _rcMeasurePoints=new Array();var _rcMeasurePoly=new Array();var _rcTotalDistance=0.0;
var _rcAccoItems = new Array();var _rcAccoItemsM = new Array();
var _rcAccoCatID=-1;var _rcDirCatID=-1;var _rcDirectoryIcon=null;
var _rcDirItemsM = new Array();var _rcDirItems = new Array();var _rcLegendPane=null;

    function rcPANECONTROL(left,top,width,height,text,opacity,backgroundcolour,bordercolour,borderwidth){
	    this._left = left;this._top = top;this._width = width;this._height= height;this._text = text;
	    this._opacity=opacity || 0;this._backgroundcolour=backgroundcolour || "#ffffff";
	    this._bordercolour=bordercolour || "#ffffff";this._borderwidth=borderwidth || 0;
    }
    rcPANECONTROL.prototype = new GControl();
    rcPANECONTROL.prototype.initialize = function(map) {
    var scPane = document.createElement("div");
    scPane.style.width=this._width + "px";scPane.style.height = this._height + "px";
    scPane.style.backgroundColor = this._backgroundcolour;
    scPane.style.border = this._borderwidth + "px solid " + this._bordercolour;
    scPane.style.filter="alpha(opacity=" + this._opacity + ")";
    scPane.style.opacity=this._opacity/100;scPane.innerHTML=this._text;
    map.getContainer().appendChild(scPane);return scPane; 
    }
    rcPANECONTROL.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(this._left, this._top));} 

function rcLeft(str, n){
	if (n <= 0) return "";
	else if (n > String(str).length)
		return str; 
	else
		return String(str).substring(0,n) + "...";}
		
function rcEventMarkerMouseOver(MarkerID,MarkerType)
{
    if (MarkerType==1)
    {
        var oMarker = _rcAccoItems[MarkerID];
        rcShowInfoPane(rcLeft(oMarker.rcTitle,45), oMarker.rcCategories);
    }
    else if (MarkerType==2)
    {
        var oDirMarker = _rcDirItems[MarkerID];
        
        rcShowInfoPane(rcLeft(oDirMarker.rcTitle,45), oDirMarker.rcCategories);
    }
}

function rcEventMarkerMouseOut()
{
	rcHideInfoPane();
}

function rcShowInfoPane(sTitle, sCategories)
{
    rcHideInfoPane();
    var shtml="<div class='vsInfoPaneTitle'>" + sTitle + "</div>" + "<div class='vsInfoPaneCat'>" + sCategories + "</div>";
    _rcItemPane = new rcPANECONTROL(5,430,330,48,shtml,90,"#ffffff","#8BB1F4",1);
	_rcMap.addControl(_rcItemPane);
}

function rcHideInfoPane()
{
    if (_rcItemPane!=null){
        _rcMap.removeControl(_rcItemPane);
        _rcItemPane=null;
    }
}

function rcShowLegendPane()
{
    if (_rcLegendPane!=null){
        rcHideLegendPane();
    }
    else{
        _rcMap.closeInfoWindow();
        rcHelpRemove();rcRemoveMeasure();
        var shtml="<div class='vsInfoPaneTitle'>" + "Map Legend" + "</div>"
        shtml+="<div class='vsInfoPaneCat'><div style='float:left;width:190px;margin-bottom:10px;'><img src='http://www.visitshanklin.co.uk/mapicons/shaamapicon.png' style='float:left'/> <div style='float:left;margin-left:10px;margin-top:2px;'>Accommodation</div></div><div style='float:left'><img src='http://www.visitshanklin.co.uk/mapicons/dirmapicon.png' style='float:left'/> <div style='float:left;margin-left:10px;margin-top:2px;'>Directory Entry</div></div></div>";
        _rcLegendPane = new rcPANECONTROL(541,40,200,100,shtml,90,"#ffffff","#8BB1F4",1);
	    _rcMap.addControl(_rcLegendPane);
	}
}

function rcHideLegendPane()
{
    if (_rcLegendPane!=null){
        _rcMap.removeControl(_rcLegendPane);
        _rcLegendPane=null;
    }
}

function rcEventMapClick(marker,pointer)
{
	if (marker)
	{
		if (_rcMeasure!=null){
			rcAddMeasurePoint(marker.getPoint());
		}
		else{
		    rcShowInfoPopup(marker);
		}
	}
	else if (pointer){
		if (_rcMeasure!=null){
			rcAddMeasurePoint(pointer);
		}
	}	
}

function rcShowInfoPopup(marker)
{
	var wTabs = [];var sClickCount=" onclick='ClickCount(" + marker.rcID + ");' ";
	rcHideInfoPane();rcHideLegendPane();rcHelpRemove();rcRemoveMeasure();
    
	var oItem = uicontrols_vsexplorer.FetchItemData(marker.rcID).value;
	var sInfoHeader="<div class='rcInfoWindow'><div><div><b>"
	if (oItem.WebAddress!="")
	{
	    sInfoHeader+="<a href='" + oItem.WebAddress + "'" + sClickCount + "target='_blank'>";
	}
	sInfoHeader+= rcLeft(oItem.Title,45);
	if (oItem.WebAddress!="")
	{
	    sInfoHeader+="</a>";
	}
	sInfoHeader+="</b></div>";
	var sInfoDetails= sInfoHeader;
	sInfoDetails+= "<div class='vsinfoframe'>" + oItem.Summary + "</div>"
	var sInfoFooter= "<div align='center'>";
	if (oItem.WebAddress!="")
	{
	    sInfoFooter+="<a href='" + oItem.WebAddress + "'" + sClickCount + "target='_blank'>Goto Website</a> | "
	}
	
	sInfoFooter+="<a href='#' onclick='_rcMap.closeInfoWindow();return false;'>Close</a>";
	
	sInfoFooter+="</div>";
	sInfoDetails+= sInfoFooter + "</div>";
	wTabs[0] = new GInfoWindowTab("Information",sInfoDetails); 

	if (oItem.Image!="")
	{
		var sPhotoPane=sInfoHeader + "<div align='center' class='vsinfoframe'>" + oItem.Image + "</div>" + sInfoFooter + "</div>";
		wTabs[1] = new GInfoWindowTab("Photo",sPhotoPane);
	}
	
	var sMapPane=sInfoHeader + "<div class='vsinfoframe'><div><input class='vsviewbut' type='button' value='Satellite Zoom' onclick='rcItemSatZoom(" + marker.rcID + "," + marker.rcType + ")' /></div><div><input class='vsviewbut' type='button' value='Map Zoom ' onclick='rcItemMapZoom(" + marker.rcID + "," + marker.rcType + ")'/></div><div><input class='vsviewbut' type='button' value='View Satellite Area' onclick='rcItemSatArea(" + marker.rcID + "," + marker.rcType + ")'/></div><div><input class='vsviewbut' type='button' value='View Map Area' onclick='rcItemMapArea(" + marker.rcID + "," + marker.rcType +  ")'/></div></div>" + sInfoFooter;
	if (oItem.Image!="")
	{
	    wTabs[2] = new GInfoWindowTab("Explore",sMapPane);
	}
	else
	{
	    wTabs[1] = new GInfoWindowTab("Explore",sMapPane);
	}

	marker.openInfoWindowTabsHtml(wTabs);    
}

function rcItemSatZoom(iItemID, iItemType)
{
    var oMarker = null;
    if (iItemType==1)
    {
        oMarker = _rcAccoItems[iItemID];
    }
    else
    {
        oMarker = _rcDirItems[iItemID];
    }
    _rcMap.setMapType(G_SATELLITE_MAP);
    _rcMap.setCenter(oMarker.getPoint(),19);
    _rcMap.panBy(new GSize(0,100));
}

function rcItemMapZoom(iItemID, iItemType)
{
    var oMarker = null;
    if (iItemType==1)
    {
        oMarker = _rcAccoItems[iItemID];
    }
    else
    {
        oMarker = _rcDirItems[iItemID];
    }
    _rcMap.setMapType(G_NORMAL_MAP);
    _rcMap.setCenter(oMarker.getPoint(),17);
    _rcMap.panBy(new GSize(0,100));
}

function rcItemMapArea(iItemID, iItemType)
{
    var oMarker = null;
    if (iItemType==1)
    {
        oMarker = _rcAccoItems[iItemID];
    }
    else
    {
        oMarker = _rcDirItems[iItemID];
    }
    _rcMap.setMapType(G_NORMAL_MAP);
    _rcMap.setCenter(oMarker.getPoint(),16);
    _rcMap.panBy(new GSize(0,100));    
}

function rcItemSatArea(iItemID, iItemType)
{
    var oMarker = null;
    if (iItemType==1)
    {
        oMarker = _rcAccoItems[iItemID];
    }
    else
    {
        oMarker = _rcDirItems[iItemID];
    }
    _rcMap.setMapType(G_SATELLITE_MAP);
    _rcMap.setCenter(oMarker.getPoint(),16);
    _rcMap.panBy(new GSize(0,100));    
}
    
function rcCreateMarker(MarkerID, MarkerType, Tooltip, Icon, Latitude, Longitude)
{
	var oPoint = new GLatLng(Latitude,Longitude);
	var marker = new GMarker(oPoint,Icon);
	marker.rcID=MarkerID;
	marker.rcType=MarkerType;
	marker.rcTitle=Tooltip;
	GEvent.addListener(marker, "mouseover", function(){rcEventMarkerMouseOver(MarkerID,MarkerType);});
	GEvent.addListener(marker, "mouseout", function(){rcEventMarkerMouseOut();});
	return marker;
}

function rcCreateIcon(IconPath,CategoryName,width,height)
{
	var oIcon = new GIcon();
	oIcon.image = IconPath;
	oIcon.mozPrintImage = IconPath;
	oIcon.iconSize = new GSize(parseInt(width),parseInt(height));
	oIcon.iconAnchor = new GPoint(parseInt(width)/2,parseInt(height/2));
	oIcon.infoWindowAnchor = new GPoint(10,10);
	oIcon.rcCategoryName=CategoryName;

	return oIcon;
} 

function rcCreateDirectoryIcon(){
    _rcDirectoryIcon = rcCreateIcon(_rcMapIconBasePath + "dirmapicon.png","Measure",20,20);
}

function rcCreateAccommodationIcon(){
    _rcAccommodationIcon = rcCreateIcon(_rcMapIconBasePath + "shaamapicon.png","Measure",20,20);
}

function rcCreateMeasureIcon(){
	_rcMeasureIcon =  rcCreateIcon(_rcMapIconBasePath + "mapiconMeasure.png","Measure",15,15);
} 

function rcAddMeasureMarker(point)
{
	var oMeasureMarker = rcCreateMarker(1,3,"Measure",_rcMeasureIcon,point.y,point.x);
	_rcMeasureMarkers.push(oMeasureMarker);
	_rcMap.addOverlay(oMeasureMarker);
}

function rcAddMeasurePoint(point)
{
	if (_rcMeasurePoints.length>0)
	{
		var aPoints=new Array();
		aPoints[0] = _rcMeasurePoints[_rcMeasurePoints.length-1];
		aPoints[1] = point;

		var oPolyline = new GPolyline(aPoints,"#000066",2,1);
		_rcMeasurePoly.push(oPolyline);
		_rcMap.addOverlay(oPolyline);

		_rcTotalDistance+=aPoints[0].distanceFrom(aPoints[1]);
		rcUpdateMeasureControl();			
	}
	rcAddMeasureMarker(point);
	_rcMeasurePoints.push(point);		
}

function rcDrawMeasure()
{
    _rcMap.closeInfoWindow();
	if (_rcMeasure==null)
	{
		rcHideLegendPane();
		rcHelpRemove();
		var sIcon="";var sStyle="";
		var shtml = "<div class='vsInfoPaneTitle'><b>Measure Distance</b></div>";
		shtml+="<div align='center'style='margin-bottom:5px;'><i>click Measure button again to close.</i></div>";
		shtml+="<div align='center' style='font-size:12px;margin-bottom:5px;'><b>" + rcDistanceFormat(_rcTotalDistance) + "</b></div>";
		shtml+="<div align='center' style='margin-bottom:3px;'><a href='#' onclick='rcResetMeasureControl()'>Reset Distance</a></div>";
		_rcMeasure = new rcPANECONTROL(531,42,210,88,shtml,100,"#ffffff","#8BB1F4",1);

		_rcMap.addControl(_rcMeasure);
	}
	else
	{
		rcRemoveMeasure();
	}
}

function rcUpdateMeasureControl()
{
	if (_rcMeasure!=null)
	{
		_rcMap.removeControl(_rcMeasure);
		_rcMeasure=null;
		rcDrawMeasure();
	}
}

function rcResetMeasureControl()
{
	rcRemoveMeasurePoints();
	rcUpdateMeasureControl();
}

function rcConvertMetersToMiles(dMeters,DecPlaces)
{
	var dMiles = dMeters * 0.000621371192;
	return dMiles.toFixed(DecPlaces);
}

function rcConvertMetersToKM(dMeters,DecPlaces)
{
	var dKM = dMeters * 0.001;
	return dKM.toFixed(DecPlaces);
}

function rcDistanceFormat(DistMeters)
{
    return rcConvertMetersToMiles(DistMeters,2) + " Miles / " +  rcConvertMetersToKM(DistMeters,2) + " KM";
}

function rcRemoveMeasurePoints()
{
	if (_rcMeasure!=null)
	{
		if (_rcMeasurePoly.length >0){
			for(i=0;i<_rcMeasurePoly.length;i++){
				_rcMap.removeOverlay(_rcMeasurePoly[i]);
			}
		}

		if (_rcMeasureMarkers.length >0){
			for(j=0;j<_rcMeasureMarkers.length;j++)	{
				_rcMap.removeOverlay(_rcMeasureMarkers[j]);
			}
		}

		_rcMeasurePoints=new Array();_rcMeasurePoly=new Array();
		_rcMeasureMarkers=new Array();_rcTotalDistance=0.0;
	}
}

function rcRemoveMeasure()
{
	if (_rcMeasure!=null)
	{
		rcRemoveMeasurePoints();
		
		_rcMap.removeControl(_rcMeasure);
		_rcMeasure=null;
	}
}

function rcMapMode(Mode)
{
    _rcMap.setMapType(Mode);
}

function rcViewShanklin()
{
    _rcMap.closeInfoWindow();
    _rcMap.setCenter(new GLatLng(50.630, -1.188), 14);
}

function rcViewIsland()
{
    _rcMap.closeInfoWindow();
    _rcMap.setCenter(new GLatLng(50.677, -1.324), 11);    
}

function rcHelp()
{
    _rcMap.closeInfoWindow();
    
    if (_rcHelpPane==null){
        rcRemoveMeasure();rcHideLegendPane();
        var shtml="<iframe width='650' height='390' src='http://www.visitshanklin.co.uk/maphelp.html'></iframe>";
        _rcHelpPane = new rcPANECONTROL(50,50,650,390,shtml,90);
	    _rcMap.addControl(_rcHelpPane);
	}
	else{
        rcHelpRemove();
	}
}

function rcHelpRemove()
{
    if (_rcHelpPane!=null)
    {
	    _rcMap.removeControl(_rcHelpPane);
	    _rcHelpPane=null;    
    }
}

function rcRemoveAccoItems()
{
    var iCount = _rcAccoItemsM.length;
    for(i=0;i<iCount;i++)
    {
        var oMarker = _rcAccoItemsM.pop();
        _rcAccoItems.pop();
        _rcMap.removeOverlay(oMarker);
    }
    
    _rcAccoItems=new Array();
    _rcAccoItemsM=new Array();
}

function rcRemoveDirItems()
{
    var iCount = _rcDirItemsM.length;
    for(i=0;i<iCount;i++)
    {
        var oMarker = _rcDirItemsM.pop();
        _rcDirItems.pop();
        _rcMap.removeOverlay(oMarker);
    }
    
    _rcDirItems=new Array();
    _rcDirItemsM=new Array();
}

function rcDrawMapItems(CategoryID1, CategoryID2)
{
    var dsMapData = uicontrols_vsexplorer.FetchMapData(CategoryID1,CategoryID2);
	var iRows = parseInt(dsMapData.value.Tables[0].Rows.length);
    var iCurrContentID=-1;    
    
    if (CategoryID1>=0)
    {
        rcRemoveAccoItems();
    
	    for(i=0;i<iRows;i++)
	    {
	        var oRow = dsMapData.value.Tables[0].Rows[i];
    	    
	        var sTitle = oRow["Title"];
	        var sCategory = oRow["Name"];
	        var iContentID = parseInt(oRow["ContentID"]);
	        var fLatitude = parseFloat(oRow["Latitude"]);
	        var fLongitude = parseFloat(oRow["Longitude"]);
    	    
	        if (iContentID!=iCurrContentID)
	        {
	            var oAccoMarker = rcCreateMarker(iContentID,1,sTitle,_rcAccommodationIcon,fLatitude,fLongitude);
	            oAccoMarker.rcCategories = sCategory;
	            _rcMap.addOverlay(oAccoMarker);
	            _rcAccoItemsM.push(oAccoMarker);
	            _rcAccoItems[iContentID] = oAccoMarker;
	        }
	        else
	        {
	            _rcAccoItems[iContentID].rcCategories+=", " + sCategory;
	        }
	        iCurrContentID=iContentID;
	    }
	}
	
    if (CategoryID2>=0)
    {
        rcRemoveDirItems();
        
        iCurrContentID=-1;
        var iTable=0;
        if (CategoryID1!=-1)
        {
            iTable=1;
        }
        
        iRows = parseInt(dsMapData.value.Tables[iTable].Rows.length);        
        
	    for(i=0;i<iRows;i++)
	    {
	        var oRow = dsMapData.value.Tables[iTable].Rows[i];
    	    
	        var sDTitle = oRow["Title"];
	        var sDCategory = oRow["Name"];
	        var iDContentID = parseInt(oRow["ContentID"]);
	        var fDLatitude = parseFloat(oRow["Latitude"]);
	        var fDLongitude = parseFloat(oRow["Longitude"]);
    	    
	        if (iContentID!=iCurrContentID)
	        {
	            var oDirMarker = rcCreateMarker(iDContentID,2,sDTitle,_rcDirectoryIcon,fDLatitude,fDLongitude);
	            oDirMarker.rcCategories = sDCategory;
	            _rcMap.addOverlay(oDirMarker);
	            _rcDirItemsM.push(oDirMarker);
	            _rcDirItems[iDContentID] = oDirMarker;
	        }
	        else
	        {
	            _rcDirItems[iDContentID].rcCategories+=", " + sDCategory;
	        }
	        
	        iCurrContentID=iDContentID;
	    }
	}	
	
}

function vsShow()
{
   _rcMap.closeInfoWindow();
   
   var ddAcco = document.getElementById(_vsDDAcco);
   var ddDir = document.getElementById(_vsDDDir); 
   
   var iAccoCatID = ddAcco.options.item(ddAcco.selectedIndex).value;

   if (iAccoCatID == _rcAccoCatID)
   {
        iAccoCatID=-1;
   }
   if (iAccoCatID==-2)
   {
        rcRemoveAccoItems();
   }      
   var iDirCatID = ddDir.options.item(ddDir.selectedIndex).value; 
   if (iDirCatID == _rcDirCatID)
   {
        iDirCatID=-1;
   }
   
   if (iDirCatID==-2)
   {
        rcRemoveDirItems();
   }
   if (iAccoCatID!=-1)
   {
        _rcAccoCatID = iAccoCatID;
   }
   
   if (iDirCatID!=-1)
   {
        _rcDirCatID = iDirCatID;
   }
  
   rcDrawMapItems(iAccoCatID,iDirCatID);
}

function vsInitMap()
{
    if (GBrowserIsCompatible()) 
    {
        _rcMap = new GMap2(document.getElementById("vsmap"));
        rcViewShanklin();
        
        var oHandler = new GKeyboardHandler(_rcMap);
        GEvent.addListener(_rcMap, "click", function(marker, point){rcEventMapClick(marker,point);});        
        
        _rcMap.enableDoubleClickZoom();
        _rcMap.enableContinuousZoom();
        
        _rcMap.addControl(new GScaleControl(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10, 30)));
        _rcMap.addControl(new GSmallMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(5,5)));
		
        shtml="<input type='button' class='vsbutton' value='View Shanklin' onclick='rcViewShanklin()'/> <input type='button' class='vsbutton' value='View Island' onclick='rcViewIsland()'/><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><input type='button' class='vsbutton' value='Map View' onclick='rcMapMode(G_NORMAL_MAP)'/> <input type='button' class='vsbutton' value='Satellite View' onclick='rcMapMode(G_SATELLITE_MAP)'/> <input type='button' class='vsbutton' value='Hybrid View' onclick='rcMapMode(G_HYBRID_MAP)'/>";		
		_rcMapControlPane = new rcPANECONTROL(132,10,630,24,shtml,100,"transparent");
		_rcMap.addControl(_rcMapControlPane);
		
		rcCreateMeasureIcon(); rcCreateAccommodationIcon(); rcCreateDirectoryIcon();
    }
    else
    {
        alert("Sorry your browser does not support Google Maps.");
    }
 }
function ClickCount(ItemID){
if (document.images){
    (new Image()).src = "clickcount.aspx?itemid=" + ItemID;}
return true;
}



