/******************************************
Name:			az_ol_functions.js
Description:	OpenLayers functionality
Date:			May 2008
Revised:        December 2008
Author:			Andy Neil
******************************************/

/****
AJAX Map Feature Functions
****/

function instantiateWebServiceClicker(azWMS)
{
    map.events.register('click', map, function (e) {
    notifyLoad(azWMS);    
    var params = {MapId: mapid, X: e.xy.x, Y: e.xy.y, Width: azWMS.map.size.w, Height: azWMS.map.size.h, BBox: azWMS.map.getExtent().toBBOX()};    
    var request = new OpenLayers.Request.GET({
    url: 'webservice/webservice.asmx/GetFeatureFromMapServerHTML',
    params: params,
    success: setFeatureResponse
    });
    OpenLayers.Event.stop(e);
    });
}

function setFeatureResponse(response) 
{
    OpenLayers.Util.getElement('featureContent').innerHTML = response.responseXML.documentElement.firstChild.nodeValue;
}

function notifyLoad(response) 
{
    OpenLayers.Util.getElement('featureContent').innerHTML = '<p style="text-align: center;">looking up information<br /><img src="images/az-loading.gif" style="margin: 0px auto;"/></p>';
}

function showFeature(fid, e, n)
{
    notifyLoad(fid);
    mapGoTo(n, e, map.getZoom());
    
    var params = {FeatureId: fid, MapId: mapid};
    var request = new OpenLayers.Request.GET({
    url: 'webservice/webservice.asmx/GetFeatureFromIdHTML',
    params: params,
    success: setFeatureResponse
    });
}

function searchFeatures()
{
    var params = {MapId: mapid, SearchTerm: document.getElementById('ol-search-query').value};
    var request = new OpenLayers.Request.GET({
    url: 'webservice/webservice.asmx/GetOLMapSearchHTML',
    params: params,
    success: setSearchResults
    });
}

function setSearchResults(response) 
{   
    var dataNode = response.responseXML.documentElement;
    var data;
    if((typeof(dataNode.textContent)) != 'undefined')
    {
        data = dataNode.textContent;
    }
    else
    {
        data = dataNode.firstChild.nodeValue;
    }    
    OpenLayers.Util.getElement('map-search-results').innerHTML = data;
    startPaging()
}

function startPaging()
{
    var resultList = document.getElementById('mapsearch-results');
    var totalResults = resultList.childNodes.length;
    if(totalResults > 10)
    {
        var i;
        for(i = 10; i < totalResults; i++)
        {
            resultList.childNodes[i].className = 'no-show';
        }
        document.getElementById('page-back-link').style.visibility = 'hidden';
        document.getElementById('page-back-link-2').style.visibility = 'hidden';
    }
}

function showSearchResults(actNum)
{
    var pageAmount = 10;
    var pageBy = actNum * 10; //number of records to page
    var resultList = document.getElementById('mapsearch-results');
    var totalResults = resultList.childNodes.length;
    
    var startResultCurrent = parseInt(resultList.getAttribute('startResult'));
    var endResultCurrent = parseInt(resultList.getAttribute('endResult'));
    var newEndResult;
    var newStartResult;
    
    //Paging Forwards
    if(actNum == 1)
    {
        newStartResult = endResultCurrent + 1;
        newEndResult = endResultCurrent + pageAmount;
        if(newEndResult > (totalResults-1))
        {
            newEndResult = totalResults;
            document.getElementById('page-forward-link').style.visibility = 'hidden';
            document.getElementById('page-forward-link-2').style.visibility = 'hidden';
        }
        else 
        {
            document.getElementById('page-forward-link').style.visibility = '';
            document.getElementById('page-forward-link-2').style.visibility = '';
        }
        document.getElementById('page-back-link').style.visibility = '';
        document.getElementById('page-back-link-2').style.visibility = '';
    }
    // and backwards
    if(actNum == -1)
    {
        newStartResult = startResultCurrent - pageAmount;
        newEndResult = startResultCurrent;
        if(newStartResult <= 0)
        {
            newStartResult = 0;
            document.getElementById('page-back-link').style.visibility = 'hidden';
            document.getElementById('page-back-link-2').style.visibility = 'hidden';
        }
        else 
        {
            document.getElementById('page-back-link').style.visibility = '';
            document.getElementById('page-back-link-2').style.visibility = '';
        }
        document.getElementById('page-forward-link').style.visibility = '';
        document.getElementById('page-forward-link-2').style.visibility = '';
    }
    //Reset the cursor for strt pos
    resultList.setAttribute('startResult',newStartResult);
    resultList.setAttribute('endResult',newEndResult);
    
    var i;
    for(i = 0; i < totalResults; i++)
    {
        if((i >= newStartResult) && (i <= newEndResult))
        {
            resultList.childNodes[i].className = '';
        }
        else
        {
            resultList.childNodes[i].className = 'no-show';
        }
    }
}

function checkAJAXSubmit()
{
    if(window.event && window.event.keyCode == 13)
    {
        searchFeatures();
        return false;
    }
}

/****
/ END: AJAX Map Feature Functions
****/

/****
General map setup & instantiation
****/
function showKey()
{
    document.getElementById('mapOverview').style.display = 'none';
    document.getElementById('mapKey').style.display = '';
    document.getElementById('ovKeyImg').src = keyImg.src;
}
function showOverview()
{
    document.getElementById('mapOverview').style.display = '';
    document.getElementById('mapKey').style.display = 'none';
    document.getElementById('ovKeyImg').src = ovImg.src;
}

function instantiateOverview()
{
    var mapOptions = {maxResolution: 'auto', maxExtent: extent, numZoomLevels: 1, zoom: 1};
    var imgLayer = new OpenLayers.Layer.Image('ov image', overImg.src ,extent,new OpenLayers.Size(ovx,ovy));
    var ov_options = {div: $('mapOverview'), mapOptions: mapOptions, size: new OpenLayers.Size(ovx, ovy), layers: [imgLayer]};
    var ovControl = new OpenLayers.Control.OverviewMap(ov_options);
    
    map.addControl(ovControl);
    ovControl.isSuitableOverview = function() {return true;};
    
    ovControl.ovmap.zoomToMaxExtent();
    ovControl.updateRectToMap()
}

function mapGoTo(north, east, zoom)
{
    var newPos = new OpenLayers.LonLat(north, east);
    map.panTo(newPos, zoom, false, true);
}

function addMapControls()
{
        //Controls for the map
        map.addControl(new OpenLayers.Control.PanZoomBar());
        map.addControl( new OpenLayers.Control.DragPan() );
        map.addControl(new OpenLayers.Control.ScaleLine({maxWidth: 200}));
        map.addControl(new OpenLayers.Control.MouseToolbar());
        map.setCenter(new OpenLayers.LonLat(startEasting, startNorthing), startZoom);
}

function replaceHtml(el, html) {
	var oldEl = typeof el === "string" ? document.getElementById(el) : el;
	/*@cc_on // Pure innerHTML is slightly faster in IE
		oldEl.innerHTML = html;
		return oldEl;
	@*/
	var newEl = oldEl.cloneNode(false);
	newEl.innerHTML = html;
	oldEl.parentNode.replaceChild(newEl, oldEl);
	/* Since we just removed the old element from the DOM, return a reference
	to the new element, which can be used to restore variable references. */
	return newEl;
};

