﻿// JScript File for Ajax Support


// callback handles map state changes
function MDNOnMapStateChangeComplete(mapClientStateUpdate)
{
    if (mapClientStateUpdate != null)
    {
        // evaluate any attached javascript
        if (mapClientStateUpdate.EvalJavascript!=null &&
            mapClientStateUpdate.EvalJavascript.length > 0)
        {
            eval(mapClientStateUpdate.EvalJavascript);
        }
        
        var uID = mapClientStateUpdate.UID;
        var mnUID = mapClientStateUpdate.MapNavID;
        
        if (mnUID)
        {
            // update map nav extents in map units if provided
            if (mapClientStateUpdate.MapEnvelopeSerial != null && 
                mapClientStateUpdate.MapEnvelopeSerial.length > 0)
            {
                eval('gMapEnvPts_' + mnUID + '=mapClientStateUpdate.MapEnvelopeSerial;');
            }
            
            // update map image dimension vars if provided
            if (mapClientStateUpdate.MapImageWidth > 0 && mapClientStateUpdate.MapImageHeight > 0)
            {
                // update image variables in javascript which are used for drawing
                eval('gIWidth_' + mnUID + '=mapClientStateUpdate.MapImageWidth;');
                eval('gIHeight_' + mnUID + '=mapClientStateUpdate.MapImageHeight;');
            }
            
            // render any attached shape array preload for hilighting
            var shapeArray = mapClientStateUpdate.ShapeArray;
            if (shapeArray!=null && shapeArray.length>0)
            {  
                var shapeIdx;
                for (shapeIdx=0; shapeIdx<shapeArray.length; shapeIdx++)
                {
                    eval('gPts_' + mnUID + '.value = shapeArray[shapeIdx];');
                    eval('RebuildMapPtArrays_' + mnUID + '();');
                    eval('if(typeof(DrawPoly_' + mnUID + 
                        ')!="undefined"){DrawPoly_' + 
                        mnUID + "('2', 'line:" + 
                        mnUID + "', gPolysClosed_" + 
                        mnUID + ');}');
                }
		    }
		    
		    // render any attached shape to edit
		    var shapeEdit = mapClientStateUpdate.ShapeEdit;
		    if (shapeEdit!=null && shapeEdit.length>0)
		    {
		        eval('gPts_' + mnUID + '.value = shapeEdit;');
                eval('RebuildMapPtArrays_' + mnUID + '();');
                eval('if(typeof(DrawPoly_' + mnUID + 
                    ')!="undefined"){DrawPoly_' + 
                    mnUID + "('2', 'line:" + 
                    mnUID + "', gPolysClosed_" + 
                    mnUID + ');}');
                eval('if(typeof(RebuildMarkerNodes_' + mnUID + 
                    ')!="undefined"){RebuildMarkerNodes_' + mnUID + '();}');
		    }
		    
		    // set new map image
            if (mapClientStateUpdate.MapImageUrl != null && 
                mapClientStateUpdate.MapImageUrl.length > 0)
            {
                // update map image reference
                var imgObj = document.getElementById(mnUID + 'mapIm');
                
                // if map image has changed
                if (imgObj.src != mapClientStateUpdate.MapImageUrl)
                {
                    MDNLoadMapImage(imgObj, mapClientStateUpdate);
                }
            }
		}
		if (uID)
        {
            // clear lock
            eval('Block_' + uID + '(false,0)');
        }
    }   
}


// MapNavigator image loader
function MDNLoadMapImage(imgObj, mapClientStateUpdate)
{
    var uID = mapClientStateUpdate.UID;
    
    // set img url
    if (imgObj && imgObj.src != mapClientStateUpdate.MapImageUrl)
    {
        // i.e. only message
        window.status = mapClientStateUpdate.MapImageUrl + '...';
        
        // create a preloader
        var preloader = new Image;
        
        // reset any offset from dragging once image is loaded
        preloader.onload = 
            function()
            {
                // set new image url
                imgObj.src = mapClientStateUpdate.MapImageUrl;
                
                imgObj.style.left='0px';
                imgObj.style.top='0px';
                imgObj.style.width=mapClientStateUpdate.MapImageWidth + 'px';
                imgObj.width=mapClientStateUpdate.MapImageWidth + 'px';
                imgObj.style.height=mapClientStateUpdate.MapImageHeight + 'px';
                imgObj.height=mapClientStateUpdate.MapImageHeight + 'px';
                imgObj.style.clip='rect(auto auto auto auto)';
                
                // clear lock
                eval('Block_' + uID + '(false,0)');
                
                // i.e. only message
                window.status = '';
            }
        
        // set preloader src        
        preloader.src = mapClientStateUpdate.MapImageUrl;
    }
    else
    {
        // clear lock
        eval('Block_' + uID + '(false,0)');
    }
}

// general purpose function to return viewable client width 
function MDNGetClientWidth() 
{ 
    if (window.innerWidth)
    {
        return window.innerWidth;
    }  
    else if (document.documentElement && document.documentElement.clientWidth != 0)
    {
        return document.documentElement.clientWidth;
    }
    else if (document.body)
    {
        return document.body.clientWidth;
    }      
    return 0;
}

// general purpose function to return viewable client height
function MDNGetClientHeight()
{
    if (window.self && self.innerHeight)
    {
          return self.innerHeight;
    }
    if (document.documentElement && document.documentElement.clientHeight)
    {
          return document.documentElement.clientHeight;
    }
    if (document.body && document.body.clientHeight)
    {
        return document.body.clientHeight;
    }
    return 0;
}


// prevent an event from propagating
function MDNEmptyEvent(event)
{
    event = event | window.event;
    
    if(event!=null)
    {
		event.returnValue=false;
		if(event.preventDefault)
		{
		    event.preventDefault();
	    }
	    if(event.stopPropagation)
	    {
	        event.stopPropagation();
	    }
	    if(typeof(event.cancelBubble)!='undefined')
	    {
	        event.cancelBubble=true;
	    }
    }
	return false;
}

function AjaxTimeout() 
{
   alert('Ajax callback timeout occurred');
}

function AjaxError(result, response) 
{
   alert('Ajax error: ' + response.get_statusCode());
}
