//Event.observe(window, 'unload'/*, GUnload*/);

var labelVisible 	= false;
var waitContent		= "";
var _levelData     = [];

_useGoogleMap  = false;
_isSpherMercProj   = false;

function initialize(west, north, east, south, useGoogleMaps, aWaitContent) {

    _useGoogleMap = useGoogleMaps;
    if (useGoogleMaps) {
        _useOSM = false;
    }
    if (_useOSM || _useGoogleMap){
        _isSpherMercProj = true;
    }

	waitContent = aWaitContent;

    if (_isSpherMercProj) {
        _srcProj = new OpenLayers.Projection("EPSG:4326");
        _mapProj = new OpenLayers.Projection("EPSG:900913"); // SpericalMercator
    }

	InitMap(west, north, east, south, useGoogleMaps);

// msLayers : Array mit den kategoriespezifischen Messstellen-Layern

	msLayers = [];

// alle kategoriespezifischen Messstellen-Layer erstellen und in msLayers einf�gen

	addLayers();


// alle Messstellen-Features erstellen und in die entsprechenden (kategoriespezifischen) Messstellen-Layern einf�gen

	addMessstellen();

// die kategoriespezifischen Messstellen-Layer dem map-Objekt zuordnen

	for (var i = 0; i < msLayers.length; i++) {
        olKarte.addLayer(msLayers[i]);
	}

// SelectFeature-Control

    selectControl = new OpenLayers.Control.SelectFeature(
    	msLayers,
        {
    		//clickout: true, toggle: false,
            //multiple: false, hover: false,
            //toggleKey: "ctrlKey", // ctrl key removes from selection
            //multipleKey: "shiftKey" // shift key adds to selection
//  		onSelect : showWellInfoWindow,
    		onSelect : showExtWin,
            onUnselect : onFeatureUnselect
        }
    );

    olKarte.addControl(selectControl);
    selectControl.activate();

    return this;
}

function addLayer( katIndex, katName )
{
//if (_useGoogleMaps) {return;}

    var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
    layer_style.cursor = 'pointer';
    layer_style.fillOpacity = 0;
    layer_style.graphicOpacity = 1;

    if (_isSpherMercProj)
    {
        var msLayer = new OpenLayers.Layer.Vector(
                katName,
                {   style       : layer_style,
                    projection  : new OpenLayers.Projection("EPSG:4326")
                }
            );
    }
    else
    {
        var msLayer = new OpenLayers.Layer.Vector( katName, {style : layer_style} );
    }

    msLayers[msLayers.length] = msLayer;
}

function addFeature( lon, lat, id, orgID, kennNr, katIndex, imgID)
{
//if (_useGoogleMaps) {return;}

	var fStyle = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
	var label = "";
	if (labelVisible ? label=kennNr : label="" );

	fStyle.cursor = "pointer";
	fStyle.graphicWidth 	= 23;
	fStyle.graphicHeight 	= 23;
	fStyle.graphicXOffset 	= -11;
	fStyle.graphicYOffset 	= -11;
	fStyle.pointRadius    	= 13;
	fStyle.externalGraphic 	= "/images/marker/marker" + imgID + ".png";
	fStyle.label 			= label;
	fStyle.labelAlign 		= 'lm';
	fStyle.labelXOffset		= 15;
	fStyle.labelYOffset		= 0;

	fStyle.labelPadding			= "1px";
	fStyle.labelBackgroundColor	=  "#ffffff";
	fStyle.labelBorderColor		=  "#afafaf";
	fStyle.labelBorderSize		=  "1px";

	fStyle.fontColor 		= "black",
	fStyle.fontSize			= "11px";
	fStyle.fontFamily		= "Arial, Verdana, DejaVu Sans, sans serif";
	fStyle.fontWeight		= "bold";
    fStyle.fillOpacity 		= 0;
    fStyle.graphicOpacity 	= 1;

    var point = getProjPoint( lon, lat );
    var feature = new OpenLayers.Feature.Vector(point, null, fStyle);

    feature.attributes = {
    		msID    	: id,
    		msOrgID   	: orgID,
    		msKennNr	: kennNr,
    		msLon       : lon,
    		msLat       : lat,
            // positive value moves the label to the right
            xOffset: 50,
            // negative value moves the label down
            yOffset: -15
        };

    msLayers[katIndex].addFeatures( [feature] );
}

function getProjBounds ( left, top, right, bottom )
{
    var bounds = new OpenLayers.Bounds( left, bottom, right, top );

    if (_isSpherMercProj) {
        bounds.transform(_srcProj, _mapProj);
    }

    return bounds;
}

function getProjLonLat ( lon, lat )
{
    var lonLat = new OpenLayers.LonLat(lon , lat);

    if (_isSpherMercProj) {
        lonLat.transform(_srcProj, _mapProj);
    }

    return lonLat;
}

function getProjPoint ( lon, lat )
{
	var point =  new OpenLayers.Geometry.Point(lon,lat);
    if (_isSpherMercProj)
    {
        point.transform(_srcProj, _mapProj);
    }

    return point;
}

function toggleLabels()
{
	for (var i=0; i < msLayers.length; i++) {
		msLayers[i].destroyFeatures();
	}

	if (labelVisible) {
		labelVisible = false;
	}
	else{
		labelVisible = true;
	}
	addMessstellen();
}


function showCategoryWells(visibleCatIndex)
{
	for (var i = 0; i < msLayers.length; i++)
	{
		msLayers[i].setVisibility( i == visibleCatIndex );
	}
}

function searchWell(e,suchText)
{
	var keycode;
	if (window.event)
	{
		keycode = window.event.keyCode;
	}
	else if (e)
	{
		keycode = e.which;
	}
	else return true;


	if (keycode != 13)
	{
		return true;
	}

	suchText = suchText.toUpperCase();

	var ok = false;

	for (var i = 0; i < msLayers.length; i++)
	{
        layer = msLayers[i];

        for (var j = 0; j < layer.features.length; j++ )
        {
        	feature = layer.features[j];
        	if (feature.attributes["msKennNr"].toUpperCase() === suchText)
        	{
        		ok = true;
        		break;
        	}
        }

        if (ok)
        {
        	break;
        }
	}

	if (ok)
	{
        zoom = olKarte.getZoomForResolution( 500 / olKarte.getSize().w, false );
        if (zoom <= olKarte.getZoom()){
            zoom = olKarte.getZoom();
        }
        lonLat = getProjLonLat( feature.attributes["msLon"], feature.attributes["msLat"] );

        olKarte.setCenter( lonLat, zoom );

		if (!layer.getVisibility())
		{
			layer.setVisibility( true );
		}
	}

	return false;
}

function loadLevelStoreData( storeId, levelData)
{
	_levelData = [];
	_levelData = levelData;
	var store =  Ext.StoreMgr.key( storeId );
	store.loadData( _levelData );
}

function buildLevelGrid(feature)
{


    // create the data store


    var store = new Ext.data.ArrayStore({
    	autoDestroy	: true,
    	storeId		: 'levelStore_' + feature.attributes['msOrgID'] + '_' + feature.attributes['msID'],
        // reader configs
        idIndex		: 0,
        fields: [
           {name: 's_date'},
           {name: 's_mNN'},
           {name: 's_mGOK'}
        ]
//        lastOptions: {params: {start: 0, limit: 25}}
    });


    // create the Grid
    var grid = new Ext.grid.GridPanel({
        store: store,
        region		: 'east',
        defaults: {
            sortable: false,
            resizable: false,
            hideable : false,
            menuDisabled: true,
            width: 50
        },
        columns: [
            {header: 'Datum', width: 100, dataIndex: 's_date'},
            {header: '[mNN]'	, width: 50 , align: 'right', dataIndex: 's_mNN'},
            {header: '[mGOK]'	, width: 50 , align: 'right', dataIndex: 's_mGOK'}
        ],
        stripeRows: true,

	    view: new Ext.ux.grid.BufferView({
	        // render rows as they come into viewable area.
	    	cacheSize:5,
	        scrollDelay: false
	      }),

        title: 'Wasserstand'
        // config options for stateful behavior
//#        stateful: true,
//#        stateId: 'grid'
    });

	var pnl = new Ext.Panel({
		layout	: 'fit',
        region		: 'east',
        height 		: 400,
        width		: 300,
//        autoHeight  : true,
        margins		:'3 3 3 0',
//        titel		: 'Wasserstand',
        items		: grid
	});

	return pnl;

}

//**
//* Standard-Fenster zum Anzeigen der Messstelleninfos
//*
function showExtWin(feature)
{
	var win_id		= 'messstelle_' + feature.attributes['msID'] + '_' + feature.attributes['msOrgID'];

	var win = Ext.getCmp( win_id );
	if (win){
		win.toFront();
		return;
	}

	var url 		= '/messstelle/show/msid/' + feature.attributes['msID'] + '/oid/' + feature.attributes['msOrgID'];
	var ajaxParams 	= 'method=GET&evalScripts=true';

    //* tabs for the center
    var tabs = new Ext.TabPanel({
        region: 'center',
        margins:'3 3 3 0',
        activeTab: 0,
        defaults:{autoScroll:true},

        items:[{
            title: 'Stammdaten',
            autoLoad : { url: 'messstelle/stammdaten?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        	// 'messstelle/stammdaten?msid='.$id.'&oid='.$messstelle->getOrgId(),
        },{
            title: 'Wasserst&auml;nde',
            autoLoad : { url: 'messstelle/waterLevels?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        },{
            title: 'Analytik',
            autoLoad : { url: 'messstelle/analysis?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        },{
            title: 'F&ouml;rdermengen',
            autoLoad : { url: 'messstelle/quantity?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        }
    ]
    });

    win = new Ext.Window({
    	id			: win_id,
        title		: 'Messstelle ' + feature.attributes['msKennNr'],
        closable	: true,
        width		: 590,
        height		: 530,
        border		: true,
        plain		: true,
        layout		: 'border',
        items		: [tabs]
    });

	win.show(this);
}


//**
//* Fenster zum Anzeigen der Messstelleninfos
//* mit Ext-Grids
//*
function showExtWin2(feature)
{
	var win_id		= 'gwweb_mswin_' + feature.attributes['msID'] + '_' + feature.attributes['msOrgID'];

	var win = Ext.getCmp( win_id );
	if (win){
		win.toFront();
		return;
	}

	var url 		= '/messstelle/show/msid/' + feature.attributes['msID'] + '/oid/' + feature.attributes['msOrgID'];
	var ajaxParams 	= 'method=GET&evalScripts=true';

/*
    // tabs for the center
    var tabs = new Ext.TabPanel({
        region: 'center',
        margins:'3 3 3 0',
        activeTab: 0,
        defaults:{autoScroll:true},

        items:[{
            title: 'Stammdaten',
            autoLoad : { url: 'messstelle/stammdaten?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        	// 'messstelle/stammdaten?msid='.$id.'&oid='.$messstelle->getOrgId(),
        },{
            title: 'Wasserstaende',
            autoLoad : { url: 'messstelle/waterLevels?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        },{
            title: 'Analytik',
            autoLoad : { url: 'messstelle/analysis?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        },{
            title: 'Foerdermengen',
            autoLoad : { url: 'messstelle/quantity?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        }
    ]
    });
*/

	var pnlLevelNorth = new Ext.Panel({
		id			: 'centerDiagram',
        region		: 'north',
        margins		:'3 3 3 0',
        autoLoad : { url: 'messstelle/waterLevels?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
	});

	var pnlLevelGrid = buildLevelGrid( feature );

	var pnlLevelSouth = new Ext.Panel({
        region		: 'center',
        height 		: 500,
        margins		:'3 3 3 0',
        items		: [pnlLevelGrid]
	});


    // tabs for the center
    var tabs = new Ext.TabPanel({
        region: 'center',
        margins:'3 3 3 0',
        activeTab: 0,
        defaults:{autoScroll:true},

        items:[{
            title: 'Stammdaten',
            autoLoad : { url: 'messstelle/stammdaten?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        	// 'messstelle/stammdaten?msid='.$id.'&oid='.$messstelle->getOrgId(),
        },{
            title: 'Wasserstaende',
            items :[pnlLevelNorth, pnlLevelSouth]
        },{
            title: 'Analytik',
            autoLoad : { url: 'messstelle/analysis?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        },{
            title: 'Foerdermengen',
            autoLoad : { url: 'messstelle/quantity?msid=' +  feature.attributes['msID'] +'&oid=' + feature.attributes['msOrgID']}
        }
    ]
    });
    win = new Ext.Window({
    	id			: win_id,
        title		: 'Messstelle ' + feature.attributes['msKennNr'],
        closable	: true,
        width		: 600,
        height		: 350,
        border		: true,
        plain		: true,
        layout		: 'border',
        animateTarget : feature,
        items		: [tabs]
    });

	win.show(feature.id);
}

//**
//* openMessstelle
//*
//* Anzeige der Wasserstand- oder Analyse-Grafiken
//*
function openMessstelle(url, id, maximizeable, wait_content)
{
	var win_id		= 'gwweb_graph';

    var w   = 950;
    var h   = 460;

	var pnl = new Ext.Panel({
		id			: 'centerDiagram',
        region		: 'center',
//        width		: w,
//        height		: h,
        autoHeight  : true,
        autoWidth   : true,
        margins		:'0 0 0 0',
        frame       : true,
        autoLoad	: url
    });

    var win = new Ext.Window({
    	id			: win_id,
        title		: '',
        closable	: true,
        width		: w,
        height		: h,
//        autoHeight  : true,
//        autoWidth   : true,
        border		: true,
        plain		: true,
        autoScroll	: true,
        layout		: 'border',
        modal       : true,
        items		: [pnl]
    });

	win.show(this);

    var ww = pnl.getFrameWidth();
    ww = pnl.getWidth();

    ww = pnl.getWidth();
    ww = win.getInnerWidth();
    ww = win.getWidth();

/*
	win.setSize(
			w + (win.getWidth() - win.getInnerWidth()),
            h + (win.getHeight() - win.getInnerHeight())
	);

	pnl.setSize(
			w + pnl.getFrameWidth(),
			h + pnl.getFrameHeight()
	);
*/

    ww = pnl.getWidth();
    ww = win.getInnerWidth();
    ww = win.getWidth();

	win.show(this);
}

function showAnalysisParam (msId, orgId, paramId, paramName)
{
	div     = 'analytic_colRight' + msId;
	url 	= 'messstelle/analysisParam?pid=' + paramId + '&msid=' + msId + '&oid=' + orgId;

	var el = Ext.get(div); // Get Ext.Element object
	var mgr = el.getUpdater();
	mgr.update({url: url});
}

function showMessstellenInfo( feature )
{
	var id 		= feature.attributes["msID"];
	var orgId	= feature.attributes["msOrgID"];

	var url 	= '/messstelle/show/msid/' + id + '/oid/' + orgId;
	var win_id	= 'messstelle_' + id + '_' + orgId;

	var theme = "mac_os_x";
	/*var theme = "vista";*/
	var width = 750;
	var height = 500;
	var maximizeable= false;
	if(maximizeable != false) maximizeable = 'toggleMaximize';

	var focusedWin = UI.defaultWM.getFocusedWindow();
	if(focusedWin) {
		var pos = focusedWin.getPosition();
		var topPosition = pos['top'] + 30;
		var leftPosition = pos['left'] + 30;
	} else {
		var topPosition = leftPosition = 150;
	}

	var uiWin = new UI.Window({id: win_id, theme: theme, shadow: true, top: topPosition, left: leftPosition, width: width, height: height, maximize: maximizeable}).show().setAjaxContent(url, {
		method: "GET",
		evalScripts:true,
		onCreate: function() {
			this.setContent(waitContent);
    	}
	});

	uiWin.bringToFront();
	uiWin.focus();
}

function onFeatureUnselect (feature) {

}
