/**
 * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
 * 
 * Published under the BSD license.
 * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
 * of the license.
 */


// Array.unique( strict ) - Remove duplicate values
Array.prototype.unique = function( b ) {
 var a = [], i, l = this.length;
 for( i=0; i<l; i++ ) {
  if( a.indexOf( this[i], 0, b ) < 0 ) { a.push( this[i] ); }
 }
 return a;
};


function check_startup(){
var checkbox_value=document.getElementById('startup_checkbox').checked;
setCookie('startup_window', checkbox_value, 365);
}


function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}

function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}





 function setHTML(response) {

//window.alert(document.getElementById('query').src.split('/')[5]);
if (document.getElementById('query').src.split('/')[5]=='query_on.png'){
//area_controls['query_window'].maximizeControl();
           if (response.responseText && !response.responseText.match('WMS server error')) {
		area_controls['query_window'].maximizeControl();
		querySliderContent = document.getElementById('queryDivcontent');
		querySliderContent.style.display="block";
        querySliderContent.style.marginRight = "3px";

//var exp_point=response.responseText.match(/[-+]?([0-9]*\.)?[0-9]+([eE][-+]?[0-9]+)/g);
//var dec_point=parseFloat(exp_point).toFixed(2);
//response.responseText.replace(response.responseText.match(/[-+]?([0-9]*\.)?[0-9]+([eE][-+]?[0-9]+)/g),parseFloat(response.responseText.match(/[-+]?([0-9]*\.)?[0-9]+([eE][-+]?[0-9]+)/g)).toFixed(2));
var query_cnt=response.responseText.split('<div');
var total_len=query_cnt.length;
var query_out=query_cnt[0];
//window.alert(query_cnt[1]+total_len);
 for( i=1; i<total_len; i++ ) {

//window.alert(query_cnt[i-1]+query_cnt[i-1].length+' '+query_cnt[i].replace(/^\s+|\s+$/g, '')+query_cnt[i].replace(/^\s+|\s+$/g, '').length);
if (query_cnt[i-1].replace(/^\s+|\s+$/g, '')==query_cnt[i].replace(/^\s+|\s+$/g, '')){} else {
var exp_point=query_cnt[i].match(/[-+]?([0-9]*\.)?[0-9]+([eE][-+]?[0-9]+)/g);
var dec_point=parseFloat(exp_point).toFixed(2);
//window.alert(exp_point+' '+dec_point);
query_cnt[i]=query_cnt[i].replace(exp_point, dec_point);
query_out=query_out+'<div'+query_cnt[i];}

}


//if (response.responseText.split('<div>')[2].indexOf('Sand')!=-1){
//response.responseText=response.responseText.split('<div>')[0]+response.responseText.split('<div>')[1];
//}
		querySliderContent.innerHTML = query_out;
//		querySliderContent.innerHTML = response.responseText;
            } else {
		area_controls['query_window'].maximizeControl();
		querySliderContent = document.getElementById('queryDivcontent');
		querySliderContent.style.display="block";
		querySliderContent.innerHTML = "No results were found";

            }       

//        window.alert(response.responseText);



    }
}


var mapPanel;


var t_size=new OpenLayers.Size(600,600);

//var minx=440000; var miny=5680000; var maxx=450000; var maxy=5800000;   /* maximum map extent in Mercator metres */
var minx=350000; var miny=5680000; var maxx=600000; var maxy=5800000;   /* maximum map extent in Mercator metres */
//var minx2=320000; var miny2=5500000; var maxx2=1000000; var maxy2=7500000;   /* very maximum map extent in Mercator metres */
var minx2=300000; var miny2=5500000; var maxx2=900000; var maxy2=6100000;   /* very maximum map extent in Mercator metres */

var extent = new OpenLayers.Bounds(minx, miny, maxx, maxy);
//var extent = new OpenLayers.Bounds(minx2, miny2, maxx2, maxy2);
var wms1 = new OpenLayers.Layer.WMS("Administrative",
  "http://"+window.location.hostname+"/geo.ms", 
  {'layers':'InterpretedChannelSystems','format':'image/png', 'LAYERS':'bathymetry,land,study_boundary','SLD':'http://'+window.location.hostname+'/resources/sld/thamesgis.sld'},{isBaseLayer: true, singleTile: true, ratio: 1, tileSize: t_size, maxResolution: 600} );
            var options = {
              units: "meters",
                projection: new OpenLayers.Projection("EPSG:32631"),
                maxExtent: extent, 
//		restrictedExtent: extent,
                maxResolution: "auto"
            };

 /* map initialisation*/
var map = new OpenLayers.Map('map', options);
map.addLayer(wms1);

            var area_controls = {
	            nav: new OpenLayers.Control.Navigation(),
		    zoom_in: new OpenLayers.Control.ZoomBox(),
		    query_window: new OGI.Control.QueryWindow()
            };
            for (var key in area_controls) {
                map.addControl(area_controls[key]);
                                                              }

map.addControl(new OpenLayers.Control.MousePosition({prefix: 'WGS84/UTM 31N &nbsp;&nbsp;', numDigits: 0}));
 var vector = new OpenLayers.Layer.Vector("Simple Geometry",
                               {attribution:"&nbsp;"});

 this.map.addLayer(vector);


 var vector2 = new OpenLayers.Layer.Vector("Simple Geometry",
                               {attribution:"MALSF material (excluding the logos) may be reproduced in any format or medium providing it is not used for commercial development of a product that can then be sold on for profit.  It may only be re-used accurately and not in a misleading context. Any reproduction must include acknowledgement of the source of the material (MALSF) and the title of the source publication.  All MALSF material is Crown copyright and must be acknowledged as such.  Where Third Party copyright has been identified, further use of that material requires permission from the copyright holders concerned."});

// this.map.addLayer(vector2);





/*
    map.events.register('click', map, function (e) {
            var url =  wms1.getFullRequestString({
                            REQUEST: "GetFeatureInfo",
                            EXCEPTIONS: "application/vnd.ogc.se_xml",
                            BBOX: wms1.map.getExtent().toBBOX(),
                            X: e.xy.x,
                            Y: e.xy.y,
                            INFO_FORMAT: 'text/html',
                            QUERY_LAYERS: wms1.params.LAYERS,
                            REDIUS:2,
                            WIDTH: wms1.map.size.w,
                            HEIGHT: wms1.map.size.h});
            OpenLayers.loadURL(url, '', this, setHTML);
            Event.stop(e);
      });

*/

Ext.onReady(function() {

/*
var minx=340000; var miny=5660000; var maxx=450000; var maxy=5770000;  
var extent = new OpenLayers.Bounds(minx, miny, maxx, maxy);
var wms1 = new OpenLayers.Layer.WMS("Administrative",
  "http://"+window.location.hostname+"/geo.ms", 
  {'layers':'InterpretedChannelSystems','format':'image/png'} );
            var options = {
              units: "meters",
                projection: new OpenLayers.Projection("EPSG:32631"),
                maxExtent: new OpenLayers.Bounds(minx, miny, maxx, maxy),
                maxResolution: "auto"
            };
var map = new OpenLayers.Map('map', options);
map.addLayer(wms1);
*/

   var treeConfig = new OpenLayers.Format.JSON().write([{
        nodeType: "gx_baselayercontainer"
    }, {
        nodeType: "gx_overlaylayercontainer",
        // render the nodes inside this container with a radio button,
        // and assign them the group "foo"
        loader: {
            baseAttrs: {radioGroup: "foo"}
        }
    }], true);

  var legendPanel = new GeoExt.LegendPanel({
        labelCls: 'mylabel',
        bodyStyle: 'padding:5px',
        width: 350,
        autoScroll: true,
        region: 'west'
    });


    var tree = new Ext.tree.TreePanel({
        border: true,
        region: "west",
        title: "Legend",
        width: 200,
        split: true,
        collapsible: true,
        collapseMode: "mini",
        autoScroll: true,
        loader: new Ext.tree.TreeLoader({
            applyLoader: false
        }),
        root: {
            nodeType: "async",
            children: Ext.decode(treeConfig)
        },
        rootVisible: false,
        lines: false
    });
 
        var nav = new Ext.Panel({
            border: true,
            title: 'Layers',
            contentEl: "description",
            region: 'west',
            autoScroll: true,
            split: true,
            width: 200,
            collapsible: true,
            collapseMode: "mini"

        });


    new Ext.Viewport({
        layout: "border",
        items: [{
            region: "north",
            contentEl: "title",
            height: 25
        }, {
            region: "center",
            id: "mappanel",
            title: "Map",
            xtype: "gx_mappanel",
            map: map,
            layers: [wms1],
            extent: extent,
            split: true
        }, nav]
    });


        // Panel for the west
        var nav2 = new Ext.Panel({
            title: 'Welcome!',
            region: 'center',
            contentEl: "welcome",
            width: 200,            
            margins:'3 0 3 3',
            cmargins:'3 3 3 3'
        });

        var win = new Ext.Window({
            title: 'Thames REC Interpretation &amp; Analysis WebGIS',
            closable:true,
            width:620,
            height:400,
            //border:false,
            plain:true,
            layout: 'border',

            items: [nav2]
        });



if ((getCookie('startup_window')=='')||(getCookie('startup_window')=='true')){
        win.show(this);
} else {win.show(this);win.hide(this);
}







    mapPanel = Ext.getCmp("mappanel");

//var map_container=Ext.getCmp('mappanel');
//insert map controls as into _OpenLayers_ViewPort


var map_controls_text='<div id="buttons" unselectable="on" style="position: absolute; top: 30px; left:60px; width: 200px; padding: 0em; height: 20px; z-index:1009;"><img src="resources/images/pan_on.png" alt="Pan" id="pan" name="mouse_action" onclick="toggle_control(this);" /><img src="resources/images/zoom_in_off.png" alt="Zoom in" id="zoom_in" name="mouse_action" onclick="toggle_control(this);"/><img src="resources/images/query_off.png" alt="Query" id="query" name="mouse_action" onclick="toggle_control(this);"/></div>';

map_controls=document.createElement("div");
map_controls.innerHTML=map_controls_text;



document.getElementById('ext-gen8').appendChild(map_controls);
//document.getElementById('ext-gen10').appendChild(map_controls);

document.getElementById('study_boundary').checked=true;

//document.getElementById('_OpenLayers_ViewPort').appendChild(map_controls);





});


function get_all_visible_layers(type){
var lyrs=new Array();
var q_layers=new Array();
var licences=new Array();

seazone_statement='Source: Copyright British Crown and SeaZone Solutions Limited. All rights reserved. <br/>Products Licence 042006.001';
bgs_statement='Source: Derived in part from 1:250,000 scale BGS Digital Data under Licence (2003/062) <br/> British Geological Survey. &copy;NERC.';
ukho_statement="Source: &copy; Crown Copyright and/or database rights. Reproduced by permission of the Controller of <br/> Her Majesty's Stationery Office and the UK Hydrographic Office (<a href='http://www.ukho.gov.uk/'>www.ukho.gov.uk</a>)";
eh_statement='Source: NMR data supplied by English Heritage, 2008';
magic_statement='Source: www.magic.gov.org; Access Date: 2008';
crown_statement='Source: www.thecrownestate.co.uk; Access Date: 2008';
kisca_statement='Source: www.kisca.org; Access Date: January 2008';
deal_statement='Source: www.ukdeal.co.uk; Access Date: 2008';


licences['seazone_bathymetry_unlicenced']=seazone_statement;
licences['sandy_sediments_unlicenced']=bgs_statement+'<br/>'+seazone_statement;
licences['wrecks_unlicenced']=eh_statement+'<br/>'+ukho_statement;
licences['county_unlicenced']=magic_statement;
licences['aonb_unlicenced']=magic_statement;
licences['iba_unlicenced']=magic_statement;
licences['lnr_unlicenced']=magic_statement;
licences['nnr_unlicenced']=magic_statement;
licences['aonb_unlicenced']=magic_statement;
licences['ramsar_unlicenced']=magic_statement;
licences['sac_unlicenced']=magic_statement;
licences['spa_unlicenced']=magic_statement;
licences['sssi_unlicenced']=magic_statement;
licences['annex1_unlicenced']=bgs_statement;
licences['aggr_thames_unlicenced']=crown_statement;
licences['aggr_east_unlicenced']=crown_statement;
licences['windfarms_unlicenced']=crown_statement;
licences['cable_unlicenced']=kisca_statement;
licences['pipeline_unlicenced']=deal_statement;
licences['surface_unlicenced']=deal_statement;
licences['subsurface_unlicenced']=deal_statement;
licences['wells_unlicenced']=deal_statement;


var copyright_message= new Array();
queryable_layers=new Array();
queryable_layers.push('gd_locations');
queryable_layers.push('gd_ddc_locations');
queryable_layers.push('2m_locations');
queryable_layers.push('2m_sabellaria');
queryable_layers.push('video_locations');
queryable_layers.push('gd_fauna_number');
queryable_layers.push('gd_fauna_ind');
queryable_layers.push('gd_fauna_biomass');
queryable_layers.push('gd_fauna_richness');
queryable_layers.push('gd_fauna_evenness');
queryable_layers.push('gd_fauna_diversity');
queryable_layers.push('gd_fauna_dominance');
queryable_layers.push('gd_dc_biotopes');
queryable_layers.push('gd_infaunal_clusters');
queryable_layers.push('gd_epifaunal_clusters');
queryable_layers.push('ecology_unlicenced');
queryable_layers.push('gd_dc_biotopes_mid');
queryable_layers.push('gd_dc_biotopes_low');
queryable_layers.push('gd_dc_biotopes_over');
queryable_layers.push('2m_ass');
queryable_layers.push('2m_ass_gr');
queryable_layers.push('complex_biotopes');
queryable_layers.push('complex_habitats');
queryable_layers.push('seabed_sediments');
queryable_layers.push('sediment_morphology_polygons');
queryable_layers.push('td_sand');
queryable_layers.push('deeps');
queryable_layers.push('annex1_unlicenced');
queryable_layers.push('sandy_sediments_unlicenced');
queryable_layers.push('aggr_east_unlicenced');
queryable_layers.push('aggr_thames_unlicenced');
queryable_layers.push('windfarms_unlicenced');
queryable_layers.push('ports_unlicenced');
queryable_layers.push('cable_unlicenced');
queryable_layers.push('pipeline_unlicenced');
queryable_layers.push('wells_unlicenced');
queryable_layers.push('surface_unlicenced');
queryable_layers.push('subsurface_unlicenced');






if (type=='wms'){
lyrs.push('bathymetry');
lyrs.push('land');

if (document.getElementById('seazone_bathymetry_unlicenced').checked==true){lyrs.push('seazone_bathymetry_unlicenced');}
if (document.getElementById('seabed_sediments').checked==true){lyrs.push('seabed_sediments');}

//layers.push('study_boundary');
}
var all_layers=document.getElementsByName('layers');
for(i=0;i<all_layers.length;i++) {
       if (all_layers[i].checked){lyrs.push(all_layers[i].value)}
       if ((all_layers[i].checked)&&(all_layers[i].value=='seabed_morphology')){q_layers.push('seabed_morphology_polygons')}
       if ((all_layers[i].checked)&&(all_layers[i].value=='seabed_sediments')){q_layers.push('seabed_sediments_under')}
       if (all_layers[i].checked && (queryable_layers.indexOf(all_layers[i].value)!=-1)){q_layers.push(all_layers[i].value)}
       if (all_layers[i].checked && (licences[all_layers[i].value])){copyright_message.push(licences[all_layers[i].value])}
}
//lyrs.sort();
//window.alert(lyrs);
//window.alert(copyright_message);
document.getElementById('OpenLayers.Control.Attribution_9').innerHTML='<p style="color: #003333; background-color:#99bbe8;" align="right">'+copyright_message.join('<br/>').split('<br/>').unique().join('<br/>')+'</p>';

if (type=='query'){
//window.alert();
return q_layers;

} else {

return lyrs.unique();
}
}





function toggle_layer_group(input) {
tmp_checked=input.checked;
var legend_group=input.value;
var legend=document.getElementById('legend_'+input.value);
legend=document.getElementById('legend_'+legend_group);
if (legend){
if (tmp_checked==false){legend.style.display='none'} else {legend.style.display='block'}
//if (legend.style.display=='block'){legend.style.display='none'} else {legend.style.display='block'}
}



document.getElementById(input.value).checked=tmp_checked;

//        map.mergeNewParams({'LAYERS': this.layers().join(',')});
//	map.params.layers = this.layers().join(',');

/*
layers=new Array();
layers.push('bathymetry');
layers.push('land');
//layers[0]='tst';
var all_layers=document.getElementsByName('layers');
for(i=0;i<all_layers.length;i++) {
       if (all_layers[i].checked){layers.push(all_layers[i].value)}
}
*/
var layers=get_all_visible_layers('wms');

// layers array is obtained by looping through all checkboxes and obtaining their values
//window.alert(layers.join(','));

var extra_extent=new Array();
extra_extent.push('saalian');
extra_extent.push('elsetriananglian');
//extra_extent.push('elsetriananglianmodified');
extra_extent.push('devensian');



wms1.mergeNewParams({'LAYERS': layers.join(',')});
if (extra_extent.indexOf(input.value)!=-1){
  map.zoomToExtent(new OpenLayers.Bounds(minx2, miny2, maxx2, maxy2));
}
//vector.attribution='New copyright';
//vector.refresh({force: true}); 
//document.getElementById('OpenLayers.Control.Attribution_9').innerHTML='New copyright';
//window.alert (vector.innerHTML);
//map.redraw();
//let's reinvent the bicycle:

//    toggleLayerGroup(input.value, input.checked);
//update_layers();
}

function update_layers() {
    //ogi.updateLayers();
}

