﻿var map=null;
var mapCentreX=null;
var mapCentreY=null;
var mapCentreZoom=null;
var mapSource=null;
var zoom=null;
var layers=null;
var linkAttrib=null;
var urlArrayConfig=null;
var gmlUrlArrayConfig=null;
var mapMarker=null;
var journeyTimesAddress=null;
var wms=null;
var zoomlength=null;
var resolution=null;
var resolutionArray=null;
var markerCentreX=0;
var markerCentreY=0;
var vmapBase=null;
var xMax=null;
var xMin=null;
var yMax=null;
var yMin=null;
var fromDate=null;
var toDate=null;
var popupMarker=null;

function init()
{
    mapCentreX=document.getElementById('mapCentreX').value;
    mapCentreY=document.getElementById('mapCentreY').value;
    mapCentreZoom=document.getElementById('mapCentreZoom').value;
    mapSource=document.getElementById('mapSource').value.toLowerCase();
    layers=document.getElementById('mapLayers').value;
    linkAttrib=document.getElementById('linkAttrib').value;
    xMax=document.getElementById('xMax').value;
    xMin=document.getElementById('xMin').value;
    yMax=document.getElementById('yMax').value;
    yMin=document.getElementById('yMin').value;
    urlArrayConfig=document.getElementById('UrlArray').value;
    gmlUrlArrayConfig=document.getElementById('GMLUrlArray').value;
    journeyTimesAddress=document.getElementById('journeyTimeAddress').value;
    fromDate=document.getElementById('hdnFromDateString').value;
    toDate=document.getElementById('hdnToDateString').value;
    resolution=document.getElementById('resolution').value;
    resolutionArray=resolution.toString().split(',');
    zoomlength=resolutionArray.length-1;
    markerCentreX=mapCentreX;
    markerCentreY=mapCentreY;
    if(mapSource=='google')
    {
        zoomlength=17;
        map=new OpenLayers.Map('map',{
            controls:[],
            tileSize:new OpenLayers.Size(256,256),
            numZoomLevels:14,
            projection:new OpenLayers.Projection('EPSG:900913'),
            displayProjection:new OpenLayers.Projection('EPSG:4326'),
            units:'m',
            numZoomLevels:18,
            maxResolution:156543.0339,
            maxExtent:new OpenLayers.Bounds(-20037508,-20037508,20037508,20037508.34),
            controls:[new OpenLayers.Control.MouseDefaults()]
        });
    }
    else
    {
        map=new OpenLayers.Map('map',{
            controls:[],
            tileSize:new OpenLayers.Size(256,256),
            numZoomLevels:zoomlength,
            resolutions:resolutionArray,
            minResolution:1.0,
            maxResolution:'auto',
            projection:new OpenLayers.Projection('EPSG:27700'),
            maxExtent:new OpenLayers.Bounds(0,0,700000,1100000),//new OpenLayers.Bounds(xMin,yMin,xMax,yMax),
            restrictedExtent:new OpenLayers.Bounds(0,0,700000,1100000),//new OpenLayers.Bounds(xMin,yMin,xMax,yMax),
            units:'degrees',
            controls:[new OpenLayers.Control.MouseDefaults()]
        });
    }
    //avoid pink tiles
    OpenLayers.IMAGE_RELOAD_ATTEMPTS=2;
    OpenLayers.Util.onImageLoadErrorColor='transparent';
    switch(mapSource)
    {
        case 'metacarter':
            map.addLayer(new OpenLayers.Layer.WMS('OpenLayers WMS','http://labs.metacarta.com/wms/vmap0?',
                {layers:'basic'},
                {'buffer':0},
                {'attribution':''+linkAttrib+''}
            ));
           break;
        case 'ito':
            map.addLayer(new OpenLayers.Layer.WMS('OpenLayers WMS','http://models.itoworld.com/map/wms',{
                    'layers':'vwa,vpa,via,r,rw,vlb',
                    'srs':'EPSG:27700',
                    'format':'image/png',
                    'transparent':'false'
                },{
                    'isBaseLayer':true,
                    'maxExtent':new OpenLayers.Bounds(0,0,700000,1100000),
                    'attribution':''+linkAttrib+'',
                    'maxResolution':1000,
                    'projection':'EPSG:27700'
                },{'buffer':0}
            ));
            break;
        case 'voyager_osgb':
            var urlArray=urlArrayConfig.toString().split(',');
//            //oxford
//            wms=new OpenLayers.Layer.WMS('Cloud Amber OSGB',
//                urlArray,{
//                    'layers':'0,1,2,3,4,5,6',
//                    'srs':'epsg:27700',
//                    'format':'image/png',
//                    'transparent':'false'
//                },{'attribution':linkAttrib,buffer:0}
//            );
//            //Cheshire
//            wms=new OpenLayers.Layer.WMS('Cloud Amber OSGB',
//                urlArray,{
//                    'version':'1.1.1',
//                    'SERVICENAME':'os_rasters_WMS',
//                    'layers':'OS250,OS50,OSSV,OS10',
//                    'srs':'epsg:27700',
//                    'format':'image/png',
//                    'transparent':'false'
//                },{'attribution':linkAttrib,buffer:0}
//            );
            //OSGB
            wms=new OpenLayers.Layer.WMS('Cloud Amber OSGB',
                urlArray,{
                    'layers':layers,
                    'srs':'EPSG:27700',
                    'format':'image/jpeg',
                    'transparent':'false'
                },{'attribution':linkAttrib,'buffer':0}
            );
            //registerEvents(wms);
            map.addLayers([wms]);
//            //Overview Map with default options
//            var overview1=new OpenLayers.Control.OverviewMap();
//            map.addControl(overview1);
//            map.setCenter(new OpenLayers.LonLat(mapCentreX,mapCentreY),0);
//            overview1.maximizeControl();

//            //OverView map with non default options
//            var mapOptions={
//                //numZoomLevels:zoomlength,
//                minResolution:60.0,//resolutions:resolutionArray,
//                projection:new OpenLayers.Projection('EPSG:27700'),
//                maxExtent:new OpenLayers.Bounds(0,0,700000,1100000),
//                //maxExtent:new OpenLayers.Bounds(33861,717605,330846,1019656),
//                units:'m'
//            };
//            var controlOptions={mapOptions:mapOptions}
//            var overview2=new OpenLayers.Control.OverviewMap(controlOptions);
//            map.addControl(overview2);
//            map.setCenter(new OpenLayers.LonLat(mapCentreX,mapCentreY),0);
//            overview2.maximizeControl();
            AddSelectedLayers();
            break;
        case 'google':
            vmapBase=new OpenLayers.Layer.Google('Google Streets',{'sphericalMercator':true});
            AddSelectedLayers();
            map.addLayers([vmapBase]);
            break;
        default:
            map.addLayer(new OpenLayers.Layer.WMS('Cloud Amber WMS',urlArray,{
                'layers':layers,
                'version':'1.3.0',
                'CRS':'EPSG:4326',
                'format':'image/png',
                'transparent':'false'
            },{'attribution':'© Crown copyright. All rights reserved 100030252 (2008).'},
            {
                'isBaseLayer':true,
                'maxExtent':new OpenLayers.Bounds(0,0,700000,1100000),
                'maxResolution':1000,
                'projection':'EPSG:27700'
            },{'buffer':0}));
            break;
    }
    map.addControl(new OpenLayers.Control.PanZoomBar());
    map.addControl(new OpenLayers.Control.NavToolbar());
    map.addControl(new OpenLayers.Control.MousePosition());
    map.addControl(new OpenLayers.Control.Attribution());
    map.events.register('moveend',map,function(e)
    {
        var obj=getSelectedLayer();
        if(obj!=undefined && obj.value=='naptan')
        {
            var cxy=new OpenLayers.LonLat(map.center.lon,map.center.lat);//this.center;
            if(mapSource=='google')
            {
                cxy.transform(map.projection,map.displayProjection);//to lonlat
            }
            document.getElementById('mapCentreX').value=cxy.lon;
            document.getElementById('mapCentreY').value=cxy.lat;
            document.getElementById('mapCentreZoom').value=map.zoom;
            var x=markerCentreX-cxy.lon;
            var y=markerCentreY-cxy.lat;
            var margin=map.layers[0].getResolution()*500*((map.zoom)*(map.zoom)+(map.zoom+1));
            if(!((x<=margin && x>=(margin*-1))&&(y<=margin && y>=(margin*-1))))
            {
                ShowDetails(obj,cxy.lon,cxy.lat);
                markerCentreX=cxy.lon;
                markerCentreY=cxy.lat;
            }
        }
    });
    map.events.register('zoomend',map,function(e)
    {
        var cxy=new OpenLayers.LonLat(map.center.lon,map.center.lat);//this.center;
        if(mapSource=='google')
        {
	        cxy.transform(map.projection,map.displayProjection);//to lonlat
        }
        document.getElementById('mapCentreX').value=cxy.lon;
        document.getElementById('mapCentreY').value=cxy.lat;
        document.getElementById('mapCentreZoom').value=map.zoom;
        var obj=getSelectedLayer();
        if(obj!=undefined && (obj.value=='naptan'||obj.value=='event'))
            ShowDetails(obj,cxy.lon,cxy.lat);
    });
    map.events.register('click',map,function(e)
    {
        var cxy=map.center;//this.center;
        //To find the eMin,eMax,nMin,nMax Position
        //var extent=map.getExtent();
        //alert(extent);
        //this.zoom or map.getZoom() to find the current zoom l
        //map_client.SetMapSessionValues(cxy.lat,cxy.lon,this.zoom);
        //var lonlat=map.getLonLatFromViewPortPx(e.xy);
        //alert(lonlat.lat);
        //To find the easting and northing value while click on the map
        //alert('You clicked near '+lonlat.lat+' N, '+lonlat.lon+' E '+zoom);
        //Display the icon when click the icon on the map
        //map_client.SetDetail(lonlat.lon,lonlat.lat,function(res){if(document.getElementById('detail')) document.getElementById('detail').innerHTML=res;});
    });
    this.SetSelectedLayer=function()
    {
        AddSelectedLayers();
        markerinit();
        if(popupMarker)
        {
            popupMarker.events.triggerEvent('mousedown',null);
            popupMarker=null;
        }
    }
    centre();
    for(i=map.controls.length-1;i>0;i--)
    {
        if(map.controls[i].CLASS_NAME=='OpenLayers.Control.NavToolbar')
        {
            map.removeControl(map.controls[i]);
        }
        else if(mapSource!='google' && map.controls[i].CLASS_NAME=='OpenLayers.Control.MousePosition')
        {
            map.controls[i].numDigits=0;
        }
        else if(map.controls[i].CLASS_NAME=='OpenLayers.Control.PanZoomBar')
        {
            map.controls[i].moveZoomBar();
        }
    }
    var obj=getSelectedLayer();
    if(obj!=undefined && !(obj.value=='naptan'||obj.value=='event'))//Get markers for voyager, naptan and event are called by zoomend function
    {
        var cxy=map.center;
        ShowDetails(obj,cxy.lon,cxy.lat);
    }
}
//For PopUps
var layer,markers;
var currentPopup;
OpenLayers.Popup.FramedCloud.prototype.autoSize=false;
var AutoSizeFramedCloud=OpenLayers.Class(OpenLayers.Popup.FramedCloud,{'autoSize':true});
function markerinit()
{
    var responseTest=document.getElementById('mapMarker').value;
    if(responseTest!='')
    {
        var cnt=0;
        var markerContent='';
        markers=new OpenLayers.Layer.Markers('zibo');
        registerEvents(layer);
        map.addLayer(markers);
        responseTest=responseTest.split('*em');
        var cxy=new OpenLayers.LonLat(document.getElementById('mapCentreX').value,document.getElementById('mapCentreY').value);
        if(mapSource=='google')
        {
	        cxy.transform(map.displayProjection,map.projection);
        }
        for(cnt=0;cnt<responseTest.length-1;cnt++)
        {
            markerContent=responseTest[cnt].split('*m');
            addMarkers(markerContent[0],markerContent[1],markerContent[2],markerContent[3],markerContent[4],markerContent[5],markerContent[6],markerContent[7],cxy);
        }
    }
}
function addMarkers(coordinates,title,popupContentHTML,iconPath,iconSize,scn,mode,toolTip,cxy)
{
    coordinates=coordinates.split(',');
    var ll,popupClass;
    ll=new OpenLayers.LonLat(coordinates[0],coordinates[1]);
    if(mapSource=='google')
    {
        ll.transform(map.displayProjection,map.projection);
    }
    popupClass=AutoSizeFramedCloud;
    popupContentHTML="<div><table cellpading='0' cellspacing='0' style='font-family:Century Gothic;font-size:8pt;padding-left:5px;padding-right:5px;'><tr style='font-size:12pt;font-weight:bold'><td>"+title+'</td></tr><tr><td>'+popupContentHTML+'</td></tr></table></div>';
    addMarker(ll,popupClass,popupContentHTML,true,true,iconPath,iconSize,title,scn,mode,toolTip,cxy);
}
/**
 * Function: addMarker
 * Add a new marker to the markers layer given the following lonlat,
 *     popupClass, and popup contents HTML. Also allow specifying
 *     whether or not to give the popup a close box.
 *
 * Parameters:
 * ll - {<OpenLayers.LonLat>} Where to place the marker
 * popupClass - {<OpenLayers.Class>} Which class of popup to bring up
 *     when the marker is clicked.
 * popupContentHTML - {String} What to put in the popup
 * closeBox - {Boolean} Should popup have a close box?
 * overflow - {Boolean} Let the popup overflow scrollbars?
 */
function addMarker(ll,popupClass,popupContentHTML,closeBox,overflow,iconPath,iconSize,title,scn,mode,toolTip,cxy)
{
    var feature=new OpenLayers.Feature(markers,ll);
    feature.closeBox=closeBox;
    feature.popupClass=popupClass;
    feature.data.popupContentHTML=popupContentHTML;
    //feature.data.overflow=(overflow)?'auto':'hidden';
    this.popup=null;
    var marker=feature.createMarker();
    var markerClick=function(evt)
    {
        clearPopups();
        feature.popup=null;
        if(feature.popup==null)
        {
            this.closeBox=closeBox;
            this.popup=feature.createPopup(this.closeBox);
            map.addPopup(this.popup);
            if((scn!='')&&(mode!=null)&&((mode.toString().toLowerCase()=='bus')||(mode.toString().toLowerCase()=='tmu')))
            {
                var obj=getSelectedLayer();
                if(obj!=undefined && (obj.value=='naptan'))
                    PageMethods.GetDeparture(scn,OnGetDepartures,OnGetMarkerFailed);
             }
             else
             {
                var divs=this.popup.contentDiv.getElementsByTagName('div')
                for(cnt=0;cnt<divs.length;cnt++)
                {
                    if(divs[cnt].id=='departures')
                        divs[cnt].innerHTML='';
                }
             }
            this.popup.show();
        }
        currentPopup=this.popup;
        OpenLayers.Event.stop(evt);
    };
//    var markerClose=function(evt)
//    {
//        alert('It\'s closes.....');
//    };
    iconSize=iconSize.split(',');
    marker.icon.url=iconPath;
    marker.icon.size=new OpenLayers.Size(iconSize[0],iconSize[1]);
    marker.icon.imageDiv.style.cursor='hand';
    marker.icon.imageDiv.title=toolTip;
    marker.icon.offset=new OpenLayers.Pixel(-160,-160);
    marker.events.register('mousedown',feature,markerClick);
    markers.addMarker(marker);
    //if((document.getElementById('mapCentreX').value==ll.lon) && (document.getElementById('mapCentreY').value==ll.lat))
    if(cxy.lon==ll.lon && cxy.lat==ll.lat)
    {
        popupMarker=marker;
    }
}
function clearPopups()
{
    var len=map.popups.length-1;
    for(len;len>=0;len--)
        map.removePopup(map.popups[len]);
}
function clearPopupsAndLayers()
{
    clearPopups();
    len=map.layers.length-1;
    for(len;len>=0;len--)
        if(!map.layers[len].isBaseLayer)
            map.layers[len].destroy();
}
function centre()
{
    switch(mapSource)
    {
        /*case 'ito_osgb':
        case 'voyager_osgb':
        {
            var centre=new OpenLayers.LonLat(parseFloat(mapCentreX),parseFloat(mapCentreY));
            map.setCenter(
                centre.transform(
                    new OpenLayers.Projection('EPSG:4326'),
                    new OpenLayers.Projection('EPSG:27700')),
                parseInt(mapCentreZoom));
        }
        break;*/
        case 'google':
        {
           var centre=new OpenLayers.LonLat(parseFloat(mapCentreX),parseFloat(mapCentreY));
           map.setCenter(centre.transform(map.displayProjection,map.projection),parseInt(mapCentreZoom));
        }
        break;
        default:
            map.setCenter(new OpenLayers.LonLat(mapCentreX,mapCentreY),parseInt(mapCentreZoom));
        break;
    }
}
//function SetMaponMove(e)
//{
//    var cxy=this.center;
//    zoom=map.zoom;
//}
function SetZoomOut(centerX,centerY,isZoomIn)
{
    document.getElementById('mapCentreX').value=centerX;
    document.getElementById('mapCentreY').value=centerY;
    mapCentreX=centerX;
    mapCentreY=centerY;
    if(isZoomIn==true)
        map.zoomIn();
    else
        map.zoomOut();
    document.getElementById('mapCentreZoom').value=map.zoom;
    mapCentreZoom=map.zoom;
    centre();
}
function SetZoomIn(centerX,centerY,isZoomIn)
{
    document.getElementById('mapCentreX').value=centerX;
    document.getElementById('mapCentreY').value=centerY;
    mapCentreX=centerX;
    mapCentreY=centerY;
    if(isZoomIn==true)
        mapCentreZoom=zoomlength;
    else
        map.zoomOut();
    document.getElementById('mapCentreZoom').value=zoomlength;
    centre();
}
function SetCenterandZoom(centerX,centerY,isZoomIn)
{
    document.getElementById('mapCentreX').value=centerX;
    document.getElementById('mapCentreY').value=centerY;
    mapCentreX=centerX;
    mapCentreY=centerY;
    if(isZoomIn==true)
        map.zoomIn();
    else
        map.zoomOut();
    document.getElementById('mapCentreZoom').value=map.zoom;
    mapCentreZoom=map.zoom;
    centre();
}
function AddSelectedLayers()
{
    layers=document.getElementById('mapLayers').value;
    var gmlUrlArray=gmlUrlArrayConfig.toString().split(',');
    if(mapSource=='google')
    {
        if(layers.indexOf('itn[JourneyTimes]')>-1)
        {
            //var gmlUrlArray=gmlUrlArrayConfig.toString().split(',');
            if(navigator.appVersion.toLowerCase().indexOf('msie 6.')==-1)
            {
                var jtn=new OpenLayers.Layer.WMS('Cloud Amber WMS',
                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
                    //gmlUrlArray,{
                        'layers':'itn[JourneyTimes]',
                        'format':'image/png',
                        'transparent':'true',
                        'Type':'sperical'
                    },{'buffer':0}
                );
                registerEvents(jtn);
                map.addLayer(jtn);
            }
            else
            {
                var jtn=new OpenLayers.Layer.WMS('Cloud Amber WMS',
                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
                        'layers':'itn[JourneyTimes]',
                        'format':'image/gif',
                        'transparent':'true',
                        'Type':'sperical'
                    },{'buffer':0}
                );
                registerEvents(jtn);
                map.addLayer(jtn);
            }
        }
    }
    else
    {
        if(layers.indexOf('itn[JourneyTimes]')>-1)
        {
            //var gmlUrlArray=gmlUrlArrayConfig.toString().split(',');
            if(navigator.appVersion.toLowerCase().indexOf('msie 6.')==-1)
            {
                var jtn=new OpenLayers.Layer.WMS('Cloud Amber WMS',
                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
                    //gmlUrlArray,{
                        'layers':'itn[JourneyTimes]',
                        'format':'image/png',
                        'transparent':'true'
                    },{'buffer':0}
                );
                registerEvents(jtn);
                map.addLayer(jtn);
            }
            else
            {
                var jtn=new OpenLayers.Layer.WMS('Cloud Amber WMS',
                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
                        'layers':'itn[JourneyTimes]',
                        'format':'image/gif',
                        'transparent':'true'
                    },{'buffer':0}
                );
                registerEvents(jtn);
                map.addLayer(jtn);
            }
        }
//        if(layers.indexOf('naptan')>-1)
//        {
//            //var gmlUrlArray=gmlUrlArrayConfig.toString().split(',');
//            if(navigator.appVersion.toLowerCase().indexOf('msie 6.')==-1)
//            {
//                var jtn=new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                    //gmlUrlArray,{
//                        'layers':'naptan',
//                        'format':'image/png',
//                        'transparent':'true'
//                    },{'buffer':0}
//                );
//                registerEvents(jtn);
//                map.addLayer(jtn);
//            }
//            else
//            {
//                var jtn=new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                        'layers':'naptan',
//                        'format':'image/gif',
//                        'transparent':'true'
//                    },{'buffer':0}
//                );
//                registerEvents(jtn);
//                map.addLayer(jtn);
//            }
//        }
//        if(layers.indexOf('ArgonautHome')>-1)
//        {
//            map.addLayer(new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                //gmlUrlArray,{
//                    'layers':'TrafficSignal,Traffic_Signal,VMS,cctv,Detector',
//                    'format':'image/png',
//                    'transparent':'true'
//                },{'buffer':0}
//            ));
//        }
////Cambridgeshire
        var layerValue='';
        var layerArray=layers.split(',');
        var length=layerArray.length;
        layerValue=layerArray[2];
////Catrographic
//        if(length<=5)
//        {
//            for(var i=3;i<length;i++)
//            {
//                layerValue=layerValue+','+layerArray[i];
//            }
//        }
//        else
//        {
//            alert('Please select only 3 layers at a time');
//            clearPopupsAndLayers();
//            layerValue='';
//            layers='';
//            var chkbox='';
//            chkbox=document.getElementById('filters').getElementsByTagName('input');
//            for(var i=0;i<chkbox.length;i++)
//            {
//                if(chkbox[i].checked)
//                {
//                    chkbox[i].checked=false;
//                }
//            }
//        }
//        if(layerValue==null)
//            layerValue='places';
////Cambridgeshire
////        (layers.indexOf('event')>-1)||(layers.indexOf('Car Parks')>-1)||
//        if((layers.indexOf('County')>-1)||(layers.indexOf('District')>-1)||(layers.indexOf('DistrictWards')>-1)||(layers.indexOf('ElectoralDivisions')>-1)||(layers.indexOf('Parish')>-1)||(layers.indexOf('ParliamentaryConstituencies')>-1)||(layers.indexOf('PrimaryCatchment')>-1)||(layers.indexOf('Secondarycatchment')>-1)||(layers.indexOf('Highwayssupervisorboundaries')>-1)||(layers.indexOf('Highwaysdivisionalboundaries')>-1)||(layers.indexOf('Policesection')>-1)||(layers.indexOf('Policedivision')>-1))
//        {
//            if(navigator.appVersion.toLowerCase().indexOf('msie 6.')==-1)
//            {
//                map.addLayer(new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                    //gmlUrlArray,{
//                        'layers':'places,'+layerValue,
//                        //'layers':layerValue,
//                        //'layers':layers,
//                        'format':'image/png',
//                        'transparent':'true'
//                    },{'buffer':0}
//                ));
//            }
//            else
//            {
//                map.addLayer(new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                    //gmlUrlArray,{
//                        'layers':'places,'+layerValue,
//                        'format':'image/gif',
//                        'transparent':'true'
//                    },{'buffer':0}
//                ));
//            }
//        }
//        if((layers.indexOf('Bridges')>-1)||(layers.indexOf('BusStops')>-1)||(layers.indexOf('AirQuality')>-1)||(layers.indexOf('Clustersites')>-1)||(layers.indexOf('CGBRoutecentreline')>-1)||(layers.indexOf('CycleCounts')>-1)||(layers.indexOf('Cycleroutes')>-1)||(layers.indexOf('CyclingSurveyData')>-1)||(layers.indexOf('Engineeringdifficulty')>-1)||(layers.indexOf('Footwayhierarchy')>-1)||(layers.indexOf('Grittingroutes')>-1)||(layers.indexOf('HgvSigns')>-1)||(layers.indexOf('HighLoadRoute')>-1)||(layers.indexOf('HeavyLoadRoute')>-1)||(layers.indexOf('IlluminatedBollard')>-1)||(layers.indexOf('IlluminatedSigns')>-1)||(layers.indexOf('OSaddresspoint')>-1)||(layers.indexOf('NationalCyclenetworkSustrans')>-1)||(layers.indexOf('NationalStreetGazetteer')>-1)||(layers.indexOf('Roadhierarchy')>-1)||(layers.indexOf('SubStandardBridges')>-1)||(layers.indexOf('SchoolLocations')>-1)||(layers.indexOf('ScientificInterest')>-1)||(layers.indexOf('Signs')>-1)||(layers.indexOf('StreetLighting')>-1)||(layers.indexOf('SchoolPatrol')>-1)||(layers.indexOf('Specialsurfacing')>-1)||(layers.indexOf('Trees')>-1)||(layers.indexOf('TrafficAccident')>-1)||(layers.indexOf('TrafficCounts')>-1)||(layers.indexOf('TrafficSpeeds')>-1)||(layers.indexOf('Trafficsensitivestreets')>-1)||(layers.indexOf('TrafficSignal')>-1))
//        {
//            if(navigator.appVersion.toLowerCase().indexOf('msie 6.')==-1)
//            {
//                map.addLayer(new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                    //gmlUrlArray,{
//                        'layers':layerValue,
//                        'format':'image/png',
//                        'transparent':'true'
//                    },{'buffer':0}
//                ));
//            }
//            else
//            {
//                map.addLayer(new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                    //gmlUrlArray,{
//                        'layers':layerValue,
//                        'format':'image/gif',
//                        'transparent':'true'
//                    },{'buffer':0}
//                ));
//            }
//        }
////Oxfordshire
////        if((layers.indexOf('District')>-1)||(layers.indexOf('FloodRisk')>-1)||(layers.indexOf('Parish')>-1)||(layers.indexOf('OxonbndLL')>-1)||(layers.indexOf('ParkandRideSites')>-1)||(layers.indexOf('FireStations')>-1)||(layers.indexOf('FloodedRoads')>-1)||(layers.indexOf('GrittingRoutes')>-1))
//        if((layers.indexOf('District')>-1)||(layers.indexOf('FloodRisk')>-1)||(layers.indexOf('Parish')>-1)||(layers.indexOf('OxonbndLL')>-1))
//        {
//            if(navigator.appVersion.toLowerCase().indexOf('msie 6.')==-1)
//            {
//                map.addLayer(new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                    //gmlUrlArray,{
//                        //'layers':'places,'+layerValue,
//                        'layers':'itn,places,'+layerValue,
//                        'format':'image/png',
//                        'transparent':'true'
//                    },{'buffer':0}
//                ));
//            }
//            else
//            {
//                map.addLayer(new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                    //gmlUrlArray,{
//                        'layers':'itn,places,'+layerValue,
//                        'format':'image/gif',
//                        'transparent':'true'
//                    },{'buffer':0}
//                ));
//            }
//        }
//        if((layers.indexOf('ParkandRideSites')>-1)||(layers.indexOf('FireStations')>-1)||(layers.indexOf('FloodedRoads')>-1)||(layers.indexOf('GrittingRoutes')>-1)||(layers.indexOf('GrittingRoutes2')>-1)||(layers.indexOf('GrittingRoutes3')>-1))
//        {
//            if(navigator.appVersion.toLowerCase().indexOf('msie 6.')==-1)
//            {
//                map.addLayer(new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                    //gmlUrlArray,{
//                        //'layers':'places,'+layerValue,
//                        'layers':'itn,'+layerValue,
//                        'format':'image/png',
//                        'transparent':'true'
//                    },{'buffer':0}
//                ));
//            }
//            else
//            {
//                map.addLayer(new OpenLayers.Layer.WMS('Cloud Amber WMS',
//                    journeyTimesAddress+'/wms.ashx?REQUEST=GetMap&',{
//                    //gmlUrlArray,{
//                        'layers':'itn,'+layerValue,
//                        'format':'image/gif',
//                        'transparent':'true'
//                    },{'buffer':0}
//                ));
//            }
//        }
    }
}
function ShowDetails(obj,easting,northing)
{
    if(obj==undefined)
        return;
    var layers='itn,places';
    var element='';
    var chkbox='';
    var checked=false;
    var count=0;
    var layerName='';

    if(obj.type=='checkbox')
    {
        chkbox=document.getElementById('filters').getElementsByTagName('input');
        for(var i=0;i<chkbox.length;i++)
        {
            if(chkbox[i].checked)
            {
                count=count+1;
                checked=true;
                element=chkbox[i].nextSibling.innerHTML;
                layerName=document.getElementsByTagName('span')[i+1].value1;
                if(element!=undefined && element.length>0)
                layers=layers+','+layerName;
                //layers=layers+','+element;
            }
        }
    }
    else
    {
        checked=true;
        if(obj.value!=undefined && obj.value.length>0)
            layers=layers+','+obj.value;
    }
    if((layers.indexOf('car_park')>-1)||(layers.indexOf('itn[JourneyTimes]')>-1)||(layers.indexOf('traffic_signal')>-1)||(layers.indexOf('naptan')>-1)||(layers.indexOf('cctv')>-1)||(layers.indexOf('vms')>-1))
        displayCalander(true);
    else
        displayCalander(false);
    clearPopupsAndLayers();
    if(checked)
    {
        markerLoading=true;
        document.getElementById('waitImage').style.visibility='visible';
        document.body.style.cursor='wait';
        document.getElementById('mapLayers').value=layers;
        if(!document.getElementById('chkToClear').checked && document.getElementById('hdnFromDateString').value.length==0)
            SetStartandEndDates();
        var fromDate=document.getElementById('hdnFromDateString').value;
        var toDate=document.getElementById('hdnToDateString').value;
        document.getElementById('mapCentreZoom').value=map.zoom;
        if(easting==undefined||easting=='0')
        {
            easting=document.getElementById('mapCentreX').value;
            northing=document.getElementById('mapCentreY').value;
        }
        PageMethods.GetMarker(layers,map.layers[0].getResolution(),easting,northing,map.zoom,fromDate,toDate,OnGetMarkerSuccess,OnGetMarkerFailed,obj.value);
    }
}
function OnGetMarkerSuccess(result,layer)
{
//    if($get(layer).checked)
//    {
        if(result=='Please select End date and time greater than Start date and time.')
        {
            alert(result);
        }
        else
        {
            $get('mapMarker').value=result;
            //$get('naptanDeparture').value=result;
            clearPopupsAndLayers();
            SetSelectedLayer();
        }
        var obj=getSelectedLayer();
        if(obj!=undefined&&obj.value==layer)
        {
            markerLoading=false;
            if(layerLoading==false)
            {
                document.getElementById('waitImage').style.visibility='hidden';
                document.body.style.cursor='default';
            }
        }
//    }
}
function OnGetDepartures(result)
{
    if(result=='')
        result=' No current  departures available';
    var text=result.split('*em');
    var divs=currentPopup.contentDiv.getElementsByTagName('div')
    for(cnt=0;cnt<divs.length;cnt++)
    {
        if(divs[cnt].id=='departures')
        {
            divs[cnt].innerHTML=result;
            break;
        }
    }
    currentPopup.updateSize();
//    currentPopup.panMapIfOutOfView=true;
//    if(currentPopup.panMapIfOutOfView)
//        currentPopup.panIntoView();
}
function OnGetMarkerFailed(error,layer)
{
    var obj=getSelectedLayer();
    if(obj!=undefined&&obj.value==layer)
    {
        markerLoading=false;
        alert('OnGetMarkerFailed : '+error.get_message());
        clearPopupsAndLayers();
        if(layerLoading==false)
        {
            document.getElementById('waitImage').style.visibility='hidden';
            document.body.style.cursor='default';
        }
    }
}
function ClickDetails()
{
//    document.getElementById('waitImage').style.visibility='visible';
//    SetStartandEndDates();
//    var fromDate=document.getElementById('hdnFromDateString').value;
//    var toDate=document.getElementById('hdnToDateString').value;
//    PageMethods.GetMarker(layers,map.layers[0].getResolution(),0,0,map.zoom,fromDate,toDate,OnGetMarkerSuccess,OnGetMarkerFailed,obj.id);
    var cxy=map.center;
    var obj=getSelectedLayer();
    ShowDetails(obj,cxy.lon,cxy.lat);
}
var layerLoading=false;
var markerLoading=false;
function registerEvents(layer)
{
    if(layer==undefined)
        return;
    layer.events.register('loadstart',layer,function()
    {
        layerLoading=true;
        document.getElementById('waitImage').style.visibility='visible';
        document.body.style.cursor='wait';
    });
    //layer.events.register('loadcancel',layer,function(){});
    layer.events.register('loadend',layer,function()
    {
        for(var i=0;i<map.layers.length;i++)
        {
            if(map.layers[i].numLoadingTiles>0)
                return;
        }
        layerLoading=false;
        if(markerLoading==false)
        {
            document.getElementById('waitImage').style.visibility='hidden';
            document.body.style.cursor='default';
        }
    });
}
function getSelectedLayer()
{
    var layerGroups=document.getElementsByName('cbLayerGroups');
    for(var i=0;i<layerGroups.length;i++)
    {
        if(layerGroups[i].checked)
            return layerGroups[i];
    }
}
function ShowDiv(obj)
{
    var divDetail=obj.parentNode.getElementsByTagName('div')[1];
    if(divDetail.style.display=='none')
        divDetail.style.display='block';
    else
        divDetail.style.display='none';
    if(currentPopup!=undefined)
    {
        currentPopup.updateSize();
        currentPopup.panIntoView();
    }
}
//function ShowPopup(obj)
//{
//    var popupDetail=obj;
//    zoom=zoomlength;
//    var fromDate=document.getElementById('hdnFromDateString').value;
//    var toDate=document.getElementById('hdnToDateString').value;
//    PageMethods.GetMarker(layers,map.layers[0].getResolution(),0,0,zoom,fromDate,toDate,OnGetMarkerSuccess,OnGetMarkerFailed,obj.id);
//}
function displayCalander(isDisable)
{
    document.getElementById('txtFromDate').disabled=isDisable;
    document.getElementById('txtToDate').disabled=isDisable;
    document.getElementById('sltFromHour').disabled=isDisable;
    document.getElementById('sltToHour').disabled=isDisable;
    document.getElementById('chkToClear').disabled=isDisable;
    document.getElementById('ClickDate').disabled=isDisable;
}
//function callfn()
//{
//    var e=window.event;
//    if(e.keyCode==116)
//    {
//        mapCentreX=document.getElementById('mapCentreX').value;
//        mapCentreY=document.getElementById('mapCentreY').value;
//        mapCentreZoom=map.zoom;
//        PageMethods.SetMapSessionValues(mapCentreX,mapCentreY,map.zoom,layers,OnGetMarkerSuccess,OnGetMarkerFailed);
//    }
// }
