﻿var map=null;
var mapCentreX=null;
var mapCentreY=null;
var mapCentreZoom=null;
var minZoomLevel=null;
var mapSource=null;
var zoom=null;
var layers=null;
var linkAttrib=null;
var urlArray=null;
var gmlUrlArray=null;
var mapMarker=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;
var markerClicked=null;
var departureTimer=null;
var format='image/png';
var media=null;
var congestionSCN=''

var baseLayer=null;
var itnLayer=null;
var gmlLayer=null;
var markerLayer=null;
var locationLayer=null;

function init()
{
    media=document.getElementById('media').value;
    mapCentreX=document.getElementById('mapCentreX').value;
    mapCentreY=document.getElementById('mapCentreY').value;
    mapCentreZoom=document.getElementById('mapCentreZoom').value;
    minZoomLevel=parseInt(document.getElementById('minZoomLevel').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;
    urlArray=document.getElementById('UrlArray').value.split(',');
    gmlUrlArray=document.getElementById('GMLUrlArray').value.split(',');
    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(navigator.appVersion.toLowerCase().indexOf('msie 6.')!=-1) format='image/gif';
    
    if(mapSource=='google')
    {
        zoomlength=17-minZoomLevel;
        map=new OpenLayers.Map('map',{
            controls:[],
            tileSize:new OpenLayers.Size(256,256),
            projection:new OpenLayers.Projection('EPSG:900913'),
            displayProjection:new OpenLayers.Projection('EPSG:4326'),
            units:'m',
            numZoomLevels:zoomlength,
            maxResolution:156543.0339,
            maxExtent:new OpenLayers.Bounds(xMin,yMin,xMax,yMax),
            restrictedExtent:new OpenLayers.Bounds(xMin,yMin,xMax,yMax),
            controls:[new OpenLayers.Control.MouseDefaults()]
        });
    }
    else
    {
        map=new OpenLayers.Map('map',{
            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(xMin,yMin,xMax,yMax),
            restrictedExtent: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 'oxford':
            //baseLayer=new OpenLayers.Layer.WMS('Oxford OSGB',["http://mymaps.oxfordshire.gov.uk//arcgis/services/UTMC1/MapServer/WMSServer","http://mymaps.oxfordshire.gov.uk//arcgis/services/UTMC2/MapServer/WMSServer"],{ //Old url
            baseLayer=new OpenLayers.Layer.WMS('Oxford OSGB',["http://mymaps.oxfordshire.gov.uk//arcgis/services/UTMC150pc/MapServer/WMSServer?SERVICENAME=UTMC150pc","http://mymaps.oxfordshire.gov.uk//arcgis/services/UTMC250pc/MapServer/WMSServer?SERVICENAME=UTMC250pc"],{
                'layers':'0,1,2,3,4,5,6',
                'srs':'epsg:27700',
                'format':'image/png',
                'transparent':'false'
            },{'attribution':linkAttrib,buffer:0});
            break;
        case 'cheshire':
            baseLayer=new OpenLayers.Layer.WMS('Cheshire OSGB',["http://merry/wmsconnector/com.esri.wms.Esrimap?"],{
                '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});
            break;
        case 'voyager_osgb':
            baseLayer=new OpenLayers.Layer.WMS('OSGB',urlArray,{
                'layers':layers,
                'srs':'EPSG:27700',
                'format':'image/jpeg',
                'transparent':'false'
            },{'attribution':linkAttrib,'buffer':0});
//            //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();
            break;
        case 'google':
            baseLayer=new OpenLayers.Layer.Google('Google Streets',{'sphericalMercator':true,MIN_ZOOM_LEVEL:minZoomLevel});
            break;
        default:
            baseLayer=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.addLayers([baseLayer]);
    map.addControl(new OpenLayers.Control.PanZoomBar());
    map.addControl(new OpenLayers.Control.NavToolbar());
    map.addControl(new OpenLayers.Control.MousePosition());
    map.addControl(new OpenLayers.Control.Attribution());
    AddSelectedLayers();
    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'||obj.value=='itn[JourneyTimes]'))
            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.SetSelectedMarker=function()
//    {
//        //AddSelectedLayers();
//        markerinit(document.getElementById('mapMarker').value,true);
//        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;
var currentPopup;
OpenLayers.Popup.FramedCloud.prototype.autoSize=false;
var AutoSizeFramedCloud=OpenLayers.Class(OpenLayers.Popup.FramedCloud,{'autoSize':true});
function markerinit(responseTest,isPopup)
{
    if(responseTest!='')
    {
        var cnt=0;
        var markerContent='';
        if(markerLayer)
            markerLayer.destroy();
        markerLayer=new OpenLayers.Layer.Markers('MarkerIcons');
        map.addLayer(markerLayer);
        setLayerIndex();
        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');
            var coordinates=markerContent[0].split(',');
			var title=markerContent[1];
			var popupContentHTML=markerContent[2];
            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,markerContent[3],markerContent[4],title,markerContent[5],markerContent[6],markerContent[7],cxy,isPopup,markerContent[8]);
        }
    }
}
/**
 * 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,isPopup,highlightLink)
{
    var feature=new OpenLayers.Feature(markerLayer,ll);
    iconSize=iconSize.split(',');
    var icon=new OpenLayers.Icon(iconPath,new OpenLayers.Size(iconSize[0],iconSize[1]),new OpenLayers.Pixel(iconSize[0]/-2,iconSize[1]/-2));
    icon.imageDiv.style.cursor='pointer';//For firefox
    icon.imageDiv.style.cursor='hand';//For IE
    icon.imageDiv.title=toolTip;
    feature.data.icon=icon;
    
    var marker=feature.createMarker();
    if(isPopup)
    {
        feature.closeBox=closeBox;
        feature.popupClass=popupClass;
        feature.data.popupContentHTML=popupContentHTML;
        //feature.data.overflow=(overflow)?'auto':'hidden';
        this.popup=null;
        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'))
                    {
                        window.clearInterval(departureTimer);
                        PageMethods.GetDeparture(scn,OnGetDepartures,OnGetMarkerFailed);
                        departureTimer=window.setInterval(function()
                        {
                            if(currentPopup!=undefined && currentPopup.visible())
                            {
                                currentPopup.updateSize();
                                PageMethods.GetDeparture(scn,OnGetDepartures,OnGetMarkerFailed);
                            }
                            else
                            {
                                window.clearInterval(departureTimer);
                            }
                        },60000);
                    }
                 }
                 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();
                changeURL();
                markerClicked=true;
            }
            currentPopup=this.popup;
            OpenLayers.Event.stop(evt);
        };
        var markerHover=function(evt)
        {
            congestionSCN=scn;
            PageMethods.GetCongestionGML(scn,onGetCongestionGMLSuccess,null,scn);
        };
        var markerLeave=function(evt)
        {
            congestionSCN=''
            if(gmlLayer && gmlLayer.features)
            {
                gmlLayer.destroyFeatures();
            }
        };
        var markerClose=function(evt)
        {
            alert('It\'s closes.....');
        };
        marker.events.register('mousedown',feature,markerClick);
        if(highlightLink.toLowerCase()=='true')
        {
            marker.events.register('mouseover',feature,markerHover);
            marker.events.register('mouseout',feature,markerLeave);
        }
        //if((document.getElementById('mapCentreX').value==ll.lon) && (document.getElementById('mapCentreY').value==ll.lat))
        if(cxy.lon.toFixed(3)==ll.lon.toFixed(3) && cxy.lat.toFixed(3)==ll.lat.toFixed(3))
        {
            popupMarker=marker;
        }
    }
    /*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);*/
    markerLayer.addMarker(marker);
}
function mapContainsLayer(layer)
{
    if(layer)
        for(var i=0;i<map.layers.length;i++)
            if(map.layers[i].name==layer.name)
                return true;
    return false;
}
function setLayerIndex()
{
    var i=1;
    if(itnLayer)
    {
        map.setLayerIndex(itnLayer,i++);
    }
    if(gmlLayer)
    {
        map.setLayerIndex(gmlLayer,i++);
    }
    if(markerLayer)
    {
        map.setLayerIndex(markerLayer,i++);
    }
    if(locationLayer)
    {
        map.setLayerIndex(locationLayer,i);
    }
}
function clearPopups()
{
    var len=map.popups.length-1;
    for(len;len>=0;len--)
        map.removePopup(map.popups[len]);
}
function clearPopupsAndLayers()
{
    clearPopups();
    for(var idx=map.layers.length-1;idx>0;idx--)
        map.layers[idx].destroy();
    itnLayer=null;
    gmlLayer=null;
    markerLayer=null;
    locationLayer=null;
    /*if(itnLayer)
    {
        itnLayer.destroy();
        itnLayer=null;
    }
    if(markerLayer)
    {
        markerLayer.destroy();
        markerLayer=null;
    }
    if(gmlLayer)
    {
        gmlLayer.destroy();
        gmlLayer=null;
    }*/
}
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()
{
    clearPopupsAndLayers();
    layers=document.getElementById('mapLayers').value;
    if(mapSource=='google')
    {
        if(layers.indexOf('itn[JourneyTimes]')>-1)
        {
            itnLayer=new OpenLayers.Layer.WMS('Cloud Amber WMS',gmlUrlArray,{
                'layers':'itn[JourneyTimes]',
                'format':format,
                'transparent':'true',
                'Type':'sperical'
            },{'buffer':0});
        }
    }
    else
    {
        var layerValue='';
        if(layers.indexOf('itn[JourneyTimes]')>-1)
            layerValue='itn[JourneyTimes]';
            
////Catrographic
//        var layerArray=layers.split(',');
//        if(layerArray.length<=5)
//        {
//            for(var i=3;i<layerArray.length;i++)
//                layerValue=layerValue+','+layerArray[i];
//
////Cambridgeshire
//            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))
//                layerValue='places,'+layerValue;
////Cambridgeshire end
//
////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))
//            {
//                //layerValue='places,'+layerValue;
//                layerValue='itn,places,'+layerValue;
//            }
//            if((layers.indexOf('ParkandRideSites')>-1)||(layers.indexOf('FireStations')>-1)||(layers.indexOf('FloodedRoads')>-1)||(layers.indexOf('GrittingRoutes')>-1)||(layers.indexOf('GrittingRoutes2')>-1)||(layers.indexOf('BusRoutes')>-1)||(layers.indexOf('GrittingRoutes3')>-1))
//            {
//                //layerValue='places,'+layerValue;
//                layerValue='itn,'+layerValue;
//            }
////Oxfordshire end
//        }
//        else
//        {
//            alert('Please select only 3 layers at a time');
//            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;
//                }
//            }
//            return;
//        }
        if(layerValue && layerValue.length>0)
        {
            itnLayer=new OpenLayers.Layer.WMS('Cloud Amber WMS',gmlUrlArray,{
                'layers':layerValue,
                'format':format,
                'transparent':'true'
            },{'buffer':0});
        }
    }
    if(itnLayer)
    {
        map.addLayer(itnLayer);
        setLayerIndex();
        registerEvents(itnLayer);
    }
}
/*function showLocation()
{
    document.getElementById("FindLocation").style.visibility='visible';
    document.getElementById("sltFromHour").style.visibility='hidden';
    document.getElementById("sltToHour").style.visibility='hidden';
}
function hideLocation()
{
    document.getElementById("FindLocation").style.visibility='hidden';
    document.getElementById("sltFromHour").style.visibility='visible';
    document.getElementById("sltToHour").style.visibility='visible';
}*/
function moveMapTo(obj)
{
    if(obj)
    {
        if(obj.value && obj.value != '')
        {
            var ne = obj.value.split(',');
            moveMapToXY(ne[0],ne[1]);
        }
        var objTown=document.getElementById('selTown');
        var objDistrict=document.getElementById('selDistrict');
        if(objTown!=obj)objTown.selectedIndex=0
        else if(objDistrict!=obj)objDistrict.selectedIndex=0
        document.getElementById('txtPostCode').value='';
    }
}
function moveMapToXY(centerX,centerY,toolTip)
{
    mapCentreX=centerX;
    mapCentreY=centerY;
    if(map.zoom<8)mapCentreZoom=8;
    else mapCentreZoom=map.zoom;
    centre();
    showLocation(centerX,centerY,toolTip);
}
function showLocation(centerX,centerY,toolTip)
{
    if(!locationLayer)
    {
        locationLayer=new OpenLayers.Layer.Markers("location");
        map.addLayer(locationLayer);
    }
    setLayerIndex();
    var cxy=new OpenLayers.LonLat(centerX,centerY);    
    if(mapSource=='google')cxy.transform(map.projection,map.displayProjection);    
    var feature=new OpenLayers.Feature(locationLayer,cxy);
    var icon=new OpenLayers.Icon("Images/location_pin.png",new OpenLayers.Size(60,59),new OpenLayers.Pixel(-48,-50));
    if(toolTip)icon.imageDiv.title=toolTip;
    feature.data.icon=icon;
    locationLayer.addMarker(feature.createMarker());
}
function findPostCodeLocation()
{
    var postCode = document.getElementById("txtPostCode").value;
    enableSearch(false);
    PageMethods.FindLocation(postCode,"",onGetLocationSuccess,onGetLocationFailed,'postcode');
}
function findLocation()
{
    var postCode = document.getElementById("txtPostCode").value;
    var street = document.getElementById("txtStreet").value;
    var selStreet = document.getElementById('selStreetTown');
    enableSearch(false);
    if(selStreet && selStreet.selectedIndex>0)
    {
        street=street+','+selStreet.value;
    }
    //For cheshire
    //PageMethods.FindLocation(postCode,street,onGetLocationSuccess,onGetLocationFailed);
    //For Surrey
    PageMethods.FindLocation('',street,onGetLocationSuccess,onGetLocationFailed,'street');
}
function onGetLocationSuccess(result,method)
{
    enableSearch(true);
    clearSearch();
    if(result=='')
    {
        if(method=='postcode') document.getElementById('postCodeError').innerHTML ='Postcode not found';
        else document.getElementById("locationError").innerHTML ='No address found';
    }
    else if(result.indexOf("moveMapToXY(")==0)
    {
        eval(result);
    }
    else
    {
        document.getElementById("locationList").innerHTML=result;
    }
}
function onGetLocationFailed(error,method)
{
    clearSearch();
    if(method=='postcode') document.getElementById('postCodeError').innerHTML ='Postcode not found';
    else document.getElementById("locationError").innerHTML ='No address found';
}
function clearSearch()
{
    document.getElementById("locationList").innerHTML='';
    document.getElementById("locationError").innerHTML='';
    document.getElementById("postCodeError").innerHTML='';
    document.getElementById("txtPostCode").value='';
    document.getElementById("txtStreet").value='';
    if(locationLayer)
    {
        locationLayer.destroy();
        locationLayer=null;
        /*var len=locationLayer.markers.length-1;
        for(len;len>=0;len--)
        {
            var m=locationLayer.markers[len];
            locationLayer.removeMarker(m);
            m.destroy();
            m=null;
        }*/
    }
}
function enableSearch(isEnable)
{
    document.getElementById("txtPostCode").disabled=!isEnable;
    document.getElementById("btnLocate").disabled=!isEnable;
    document.getElementById("txtStreet").disabled=!isEnable;
    document.getElementById("btnSearch").disabled=!isEnable;
    document.getElementById("btnClear").disabled=!isEnable;
}
function onGetCongestionGMLSuccess(result,scn)
{
    if(scn==congestionSCN && result.length>0)
    {
        var pointList = [];
        for(var i=0;i<result.length-1;i++)
            pointList.push(new OpenLayers.Geometry.Point(result[i],result[++i]));
        var styleBlueLine={
	        fillOpacity:0.8,
	        fillColor:"#0000FF",
	        strokeColor:"#0000FF",
	        strokeWidth:4,
	        pointRadius:7
        }
        var lineFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(pointList),null,styleBlueLine);
        if(!mapContainsLayer(gmlLayer))
        {
            gmlLayer = new OpenLayers.Layer.Vector("GML");
            map.addLayer(gmlLayer);
            setLayerIndex();
        }
        if(scn==congestionSCN)//still mouse hover
            gmlLayer.addFeatures([lineFeature]);
    }
}
function ShowDetails(obj,easting,northing)
{
    window.clearInterval(departureTimer);
    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;
    }
    //car_park cctv itn[JourneyTimes] naptan traffic_signal vms
    if((layers.indexOf('accident,incident')>-1)||(layers.indexOf('accident_incident')>-1)||(layers.indexOf('event')>-1)||(layers.indexOf('roadworks')>-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;
        }
        AddSelectedLayers();
        PageMethods.GetMarker(layers,map.layers[0].getResolution(),easting,northing,map.zoom,fromDate,toDate,OnGetMarkerSuccess,OnGetMarkerFailed,obj.value);
    }
}
function OnGetMarkerSuccess(result,layer)
{
    var obj=getSelectedLayer();
    if(obj!=undefined&&obj.value==layer)
    {
        if(result=='Please select End date and time greater than Start date and time.')
        {
            alert(result);
        }
        else
        {
            //$get('mapMarker').value=result;
            //clearPopupsAndLayers();
            //SetSelectedMarker();
            markerinit(result,true);
            if(popupMarker)
            {
                popupMarker.events.triggerEvent('mousedown',null);
                popupMarker=null;
            }
        }
        markerLoading=false;
        isLayerLoading();
        if(layerLoading==false)
        {
            document.getElementById('waitImage').style.visibility='hidden';
            document.body.style.cursor='default';
        }
    }
}
function updateSize(obj)
{
    obj.style.height=obj.height+'px';
    obj.style.width=obj.width+'px';
    //if(currentPopup!=undefined && markerClicked!=undefined && markerClicked)
    //{
        //currentPopup.updateSize();
        //markerClicked=false;
    //}
    //obj.onload=null;
}
function OnGetDepartures(result)
{
    if(currentPopup!=undefined && currentPopup.visible())
    {
        var d=new Date();
        var n;//=d.getDate();
        var dt='';//=(n<10)?'0'+n:n;
        //n=d.getMonth()+1;
        //dt+='/'+((n<10)?'0'+n:n);
        //dt+='/'+d.getFullYear();
        n=d.getHours();
        dt+=' '+((n<10)?'0'+n:n);
        n=d.getMinutes();
        dt+=':'+((n<10)?'0'+n:n);
        n=d.getSeconds();
        dt+=':'+((n<10)?'0'+n:n);
        
        if(result=='')
            result=' No current  departures available';
        else
            result='Real time shown in mins, timetable in 24hr clock'+result
        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='Last refresh time '+dt+'<br>'+result;
                break;
            }
        }
        currentPopup.updateSize();
    }
    else
    {
        window.clearInterval(departureTimer);
    }
}
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(){alert('end')});
    layer.events.register('loadend',layer,isLayerLoading);
}
function isLayerLoading()
{
    for(var i=1;i<map.layers.length;i++) //not for base layer
    {
        if(map.layers[i].numLoadingTiles!=undefined && 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(isDisplay)
{
    document.getElementById('txtFromDate').disabled=!isDisplay;
    document.getElementById('txtToDate').disabled=!isDisplay;
    document.getElementById('sltFromHour').disabled=!isDisplay;
    document.getElementById('sltToHour').disabled=!isDisplay;
    document.getElementById('chkToClear').disabled=!isDisplay;
    document.getElementById('ClickDate').disabled=!isDisplay;
}
//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);
//    }
// }
function changeURL()
{
    if(location.href.indexOf("yorkshirevoyager.com")>-1)
    {
        var anchor = document.getElementsByTagName("a");
	    for(i=0;i<anchor.length;i++)
	    {
	        if(anchor[i].href.indexOf("gettheresooner.travelsouthyorkshire.com"))
	        {
	            var re = /gettheresooner.travelsouthyorkshire/i;
		        anchor[i].href = anchor[i].href.replace(re,"www.yorkshirevoyager");
            }
        }
    }
}
function showDocuments(obj,scn)
{
    var left = screen.width/2 - 420;
    var top = screen.height/2 - 220;
    var path = document.getElementById('viewDocuments').value;
    var docWindow = window.open(path+'?o='+obj+'&r='+scn,'Documents','Width=840,Height=500,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=yes,top='+top+'px,left='+left+'px');
    docWindow.focus();
    return false;
}
function expandCollapse(obj)
{
    //var filter = obj.parentNode.getElementsByTagName('span')[1];
    //filter.className = (filter.className == 'hide')?'show':'hide';
    var filter = obj.parentNode;
    filter.className = (filter.className == 'showFilters')?'hideFilters':'showFilters';
}
function txt_KeyDown(e,obj)
{
    if(e.keyCode == 13)
    {
        switch(obj.id)
        {
            case "txtPostCode":
                findPostCodeLocation();
            break;
            case "txtStreet":
                findLocation();
            break;
        }
    }
}
