﻿/// <reference path="../../../../../Static/Shared/Javascript/utilities.js" />
// Convinience class to group functionality concerning Løype presentation

var LoypeTooltip = {
    m_currentTooltip : null,
    _showDescription: function(t_title, t_pointerX, t_pointerY, t_tooltipId, t_content, t_featureCount) {       
        var loypeTooltip = $find(t_tooltipId);
        loypeTooltip.set_content(t_content);
        
//        var t_newTitle = t_title;
//        if(t_featureCount > 1)
//        {
//            t_newTitle += " (" + t_featureCount + ")";
//        }
//        loypeTooltip.set_title(t_newTitle);
        loypeTooltip.set_title(t_title);
        
        var tooltipwidth = 240; // legger på 10px "slack"
        var tooltipheight = 275; // legger på 10px for "slack"
        
        var h = Utilities.Window.getSize().height;
        var w = Utilities.Window.getSize().width;
        
        var minx = 0;
        var maxx = w;
        var miny = 34;
        var maxy = h - 34;
        
        if(g_kartController.isLeftMenuExpanded())
        {
            minx = 322;
        }
        
        if(g_kartController.isGlobeExpanded())
        {
            maxx = w - ((w - minx)/2);
        }
        
        var y = 0;
        var x = 0;
        
        var y_direction = "top";
        var x_direction = "center";
        
        // Calculate offset for top Y direction:
        y = - t_pointerY;
        
        // Calculate offset for center X direction:
        if((w/2) > t_pointerX)
        {
            x = -((w/2) - t_pointerX);
        }
        else
        {
            x = t_pointerX - (w/2);
        }
        
        if(t_pointerY < tooltipheight + miny)
        {
            y_direction = "bottom";
            y = -(h - t_pointerY);
        }
        
        if(t_pointerX < (tooltipwidth + minx))
        {
            x_direction = "right";
            x = -(w - t_pointerX);
        }
        else if(t_pointerX > maxx - tooltipwidth)
        {
            x_direction = "left";
            x = - t_pointerX;
        }
               
        // Set correct callout-direction
        if(y_direction == "top")
        {
            if(x_direction == "right")
            {
                loypeTooltip.set_position(Telerik.Web.UI.ToolTipPosition.TopRight);
            }
            else if(x_direction == "center")
            {
                loypeTooltip.set_position(Telerik.Web.UI.ToolTipPosition.TopCenter);
            }
            else if(x_direction == "left")
            {
                loypeTooltip.set_position(Telerik.Web.UI.ToolTipPosition.TopLeft);
            }
        }
        else if(y_direction == "bottom")
        {
            if(x_direction == "right")
            {
                loypeTooltip.set_position(Telerik.Web.UI.ToolTipPosition.BottomRight);
            }
            else if(x_direction == "center")
            {
                loypeTooltip.set_position(Telerik.Web.UI.ToolTipPosition.BottomCenter);
            }
            else if(x_direction == "left")
            {
                loypeTooltip.set_position(Telerik.Web.UI.ToolTipPosition.BottomLeft);
            }
        }
        
        loypeTooltip.set_offsetX(x);
        loypeTooltip.set_offsetY(y);
        //loypeTooltip.moveTo(t_pointerX, t_pointerY - loypeTooltip.get_height());
        
        var contentElement = loypeTooltip.get_contentElement();
        if(contentElement != null) {
            var featureDiv = null; // $('featureDiv');
            var attributesDiv = null; //$('attributesDiv');
            var firstElementDiv = null; //$('firstElementDiv');
            var pagingContainer = null; //$('pagingContainer');
                
            var divChildren = contentElement.getElementsByTagName("div");
            if(divChildren != null) {
                var i, t_length = divChildren.length;
                for(i = 0; i < t_length; i++) {
                    if(divChildren[i].id == 'featureDiv') {
                        featureDiv = divChildren[i];
                    }
                    else if(divChildren[i].id == 'attributesDiv') {
                        attributesDiv = divChildren[i];
                    }
                    else if(divChildren[i].id == 'firstElementDiv') {
                        firstElementDiv = divChildren[i];
                    }
                    else if(divChildren[i].id == 'pagingContainer') {
                        pagingContainer = divChildren[i];
                    }
                }
            }

            if(featureDiv != null && attributesDiv != null) {
                var t_fe = 0;
                if(firstElementDiv != null) {
                    t_fe = firstElementDiv.clientHeight;
                }
                var t_pc = 0;
                if(pagingContainer != null) {
                    t_pc = 31;
                }
                var t_newheight = (196 - t_pc - t_fe);
                if(t_newheight > 0) {
                    attributesDiv.style.height = t_newheight + "px";
                }
            }
        }
        
        loypeTooltip.show();
        
        this.m_currentTooltip = loypeTooltip;
    },

    hideDescription: function(t_tooltipId) {
        var loypeTooltip = $find(t_tooltipId);
        if (loypeTooltip.isVisible()) {
            loypeTooltip.hide();
        }
    },
    
    _closeCurrent : function()
    {
        if( this.m_currentTooltip != null )
        {
            if (this.m_currentTooltip.isVisible()) {
                this.m_currentTooltip.hide();
            }
        }
    },
    
    _setTooltipContent : function(t_title, t_content)
    {
        if( this.m_currentTooltip != null )
        {
            this.m_currentTooltip.set_title(t_title);
            this.m_currentTooltip.set_content(t_content);
            
            var featureDiv = null; // $('featureDiv');
            var attributesDiv = null; //$('attributesDiv');
            var firstElementDiv = null; //$('firstElementDiv');
            
            var contentElement = this.m_currentTooltip.get_contentElement();
            if(contentElement != null) {
                var featureDiv = null; // $('featureDiv');
                var attributesDiv = null; //$('attributesDiv');
                var firstElementDiv = null; //$('firstElementDiv');
                var pagingContainer = null; //$('pagingContainer');
                
                var divChildren = contentElement.getElementsByTagName("div");
                if(divChildren != null) {
                    var i, t_length = divChildren.length;
                    for(i = 0; i < t_length; i++) {
                        if(divChildren[i].id == 'featureDiv') {
                            featureDiv = divChildren[i];
                        }
                        else if(divChildren[i].id == 'attributesDiv') {
                            attributesDiv = divChildren[i];
                        }
                        else if(divChildren[i].id == 'firstElementDiv') {
                            firstElementDiv = divChildren[i];
                        }
                        else if(divChildren[i].id == 'pagingContainer') {
                            pagingContainer = divChildren[i];
                        }
                    }
                }

                if(featureDiv != null && attributesDiv != null) {
                    var t_fe = 0;
                    if(firstElementDiv != null) {
                        t_fe = firstElementDiv.clientHeight;
                    }
                    var t_pc = 0;
                    if(pagingContainer != null) {
                        t_pc = 31;
                    }
                    var t_newheight = (196 - t_pc - t_fe);
                    if(t_newheight > 0) {
                        attributesDiv.style.height = t_newheight + "px";
                    }
                }
            }
            
            //this.m_currentTooltip.get_contentFrame().contentWindow.document.innerHTML = t_content;
        }
    },

    // Get info from FriluftInfoProxy based on coordinates
    getInfo: function(t_customerId, t_themeId, t_wmsName, t_wmsLayersIds, t_title, t_mapX, t_mapY, t_pointerX, t_pointerY, t_tooltipId, t_index, t_wait) 
    {
        if (t_wait) {
            LoypeTooltip._showDescription("Venter...", t_pointerX, t_pointerY, t_tooltipId, LoypeTooltip._getWaitingElement(), 0);
            //LoypeTooltip._setTooltipContent("Venter...", LoypeTooltip._getWaitingElement());
        }
        
        Norkart.Web.Fag.Applications.MapPortal.AJAX.WebServices.Friluft.FriluftInfoProxy.GetLoypeInfo(
		    t_customerId,
		    t_themeId,
		    t_wmsName,
		    t_title,
		    t_wmsLayersIds.join(","), //id
			t_mapX,
			t_mapY,
			t_pointerX,
			t_pointerY,
			t_tooltipId,
			g_kartController.getFeatureSearchTolerance(),
			$ifDefined(t_index, 0),
			this._onInfoSuccess,
			this._onInfoFailed,
			{
			    title: t_title,
			    tooltipId: t_tooltipId,
			    pointerX: t_pointerX,
			    pointerY: t_pointerY,
			    wmsLayersIds : t_wmsLayersIds
			}
		);
    },

    _getWaitingElement: function() {
        return "<div style='height: 223px; width: 230px; overflow: auto; padding-top: 10px;'><img src='/Static/Shared/images/ui/red-spinner.gif' />" +
            " Henter informasjon...</div>";
    },

    createVerticalProfile: function(t_name, t_wmsName, t_layer, t_hash, t_x, t_y, t_gfiTolerance, t_featureIndex) {
        var t_dimension = g_kartController.getContentWindowDimension();
        var t_url = "/System/Friluft/HoydeProfil/" + g_kartController.getCustomerId() + "?themeId=" + g_kartController.getThemeId() +
	            "&hashKey=" + t_hash + "&wmsName=" + t_wmsName + "&layers=" + t_layer + "&x=" + t_x + "&y=" + t_y +
	            "&gfiTolerance=" + t_gfiTolerance + "&featureIndex=" + t_featureIndex + "&width=" + t_dimension.width;
	    g_kartController.addSlidingMenuTab(t_url, "Høydeprofil for " + t_name, 1);
	    g_kartController.hideUnusedTabs(2);
	    g_kartController.openSlidingMenu();
	    
	    this._closeCurrent();
    },
    
    beginFlyPolyline : function(t_hashId, t_wmsId, t_coordinatesFallbackUrl)
    {
	    this._closeCurrent();
        var t_fallback = true;
        //If rectangletree is loaded, retrived the coordinates from it. 
        if( $defined(g_friluftRectangleTreeController) &&
            g_friluftRectangleTreeController != null )
        {
            var t_track = g_friluftRectangleTreeController.findByHash(t_hashId); //,t_wmsId);
            
            if( t_track != null )
            {
                g_kartController.navigatePath(
                    t_track.getTrackCoordinates(), true);
                t_fallback = false;
            }
        }
        
        if(t_fallback) //Otherwise fallback to server-side loading of coordinates.
        {
            $invokeOnResponse(
                g_kartController.navigatePath.bind(g_kartController), 
                t_coordinatesFallbackUrl, 
                true);
        }
    },
    
    createTrackLink: function(t_wmsId, t_wmsLayersIds, t_trackId, t_x1, t_y1, t_x2, t_y2)
    {
        var t_x = t_x1 + ((t_x2 - t_x1) / 2);
        var t_y = t_y1 + ((t_y2 - t_y1) / 2);
        var t_zoom = g_kartController.getZoomLevelForBBox(t_x1, t_y1, t_x2, t_y2);
        
//        var t_url = ("http://" + location.host + location.pathname).replace("#", "") + 
//            "?wmsId=" + t_wmsId + "&wmsLayersIds=" + t_wmsLayersIds + "&trackId=" + t_trackId +
//            "&x=" + t_x + "&y=" + t_y + "&zoom=" + t_zoom;
//        var t_expl = "Trykk ctrl+c for å kopiere url til utklippstavlen.";
//        reply = prompt(t_expl, t_url);
        var t_url = 
	            "/System/Friluft/DirectLink/" +
	            g_kartController.getCustomerId() +
	            "?path=" + (location.host + location.pathname).replace("#", "") +
	            "&wmsId=" + t_wmsId + 
	            "&wmsLayersIds=" + t_wmsLayersIds + 
	            "&trackId=" + t_trackId +
                "&x=" + t_x + 
                "&y=" + t_y + 
                "&zoom=" + t_zoom;
	    
	    //window.open(encodeURI(t_url), '', 'width=500px, height=175px, scrollbars=1, resize=yes', false);
	    displayInfoWindow(encodeURI(t_url), 175, 500);
    },
    
    createGPSTrack: function(t_name, t_wmsName, t_layer, t_x, t_y, t_gfiTolerance, t_featureIndex) {
        var t_url = 
	            "/System/Friluft/GPSTrackCoordinates/" +
	            g_kartController.getCustomerId() +
	            "?themeId=" + g_kartController.getThemeId() +
	            "&wmsName=" + t_wmsName +
	            "&layers=" + t_layer +
	            "&x=" + t_x +
	            "&y=" + t_y +
	            "&gfiTolerance=" + t_gfiTolerance +
	            "&featureIndex=" + t_featureIndex +
	            "&name=" + t_name;
	    this._closeCurrent();
	    
//      window.open(encodeURI(t_url), '', 'width=500px, height=500px, scrollbars=1, resize=yes', false);
        displayInfoWindow(encodeURI(t_url), 500, 500, "GPS-koordinater");
    },

    _onInfoSuccess: function(t_value, t_binds) {
//        alert("FeatureHashCode: " + t_value.FeatureHashCode);
        if (t_value != null && t_value.Content != null) {
            try {
                if (t_binds.m_currentTooltip == null || !t_binds.m_currentTooltip.isVisible()) {
                    LoypeTooltip._showDescription(t_binds.title, t_binds.pointerX, t_binds.pointerY, t_binds.tooltipId, t_value.Content, t_value.FeatureCount);
                }
                else {
                    LoypeTooltip._setTooltipContent(t_binds.title, t_value.Content);
                }
                TrackTooltip.highlightTrack(t_value.WmsId, t_binds.wmsLayersIds, t_value.FeatureHashCode);
            }
            catch (e) {
            }
        }
        else {
            LoypeTooltip._setTooltipContent("Ingen informasjon", 
            "<div style='height: 223px; width: 230px; overflow: auto; padding-top: 10px;'>Beklager! Ingen informasjon funnet.</div>");
    
        }
    },

    _onInfoFailed: function(t_value, t_thisbind) {
        //alert("Beklager! Det oppstod en feil under henting av info.");
        LoypeTooltip._setTooltipContent("Feil", 
            "<div style='height: 223px; width: 230px; overflow: auto; padding-top: 10px;'>Beklager! Det oppstod en feil under henting av informasjon.</div>");
    }
}

