/**
 * (c) 2006 3Kon GmbH
 *
 * originally served by winMan from DM Solutions
 *
 */

/**********************************************************************
 *
 * Copyright (c) 2005, DM Solutions Group Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 *
 **********************************************************************/

 // by Tilmann Fruntke
 	var headerSize = 35; /* muss bei manchen berechnung aufgeschlagen werden */
 
 var myKaMap = myKaNavigator = myKaQuery = myScalebar = myjwSearch = null;
 var mapWindowID = "myViewport"
var queryParams = null;

//window manager
var kaWinMan=null;


/**
 * parse the query string sent to this window into a global array of key = value pairs
 * this function should only be called once
 */
function parseQueryString() {
    queryParams = {};
    var s=window.location.search;
    if (s!='') {
        s=s.substring( 1 );
        var p=s.split('&');
        for (var i=0;i<p.length;i++) {
            var q=p[i].split('=');
            queryParams[q[0]]=q[1];
        }
    }
}

/**
 * get a query value by key.  If the query string hasn't been parsed yet, parse it first.
 * Return an empty string if not found
 */
function getQueryParam(p) {
    if (!queryParams) {
        parseQueryString();
    }
    if (queryParams[p]) {
        return queryParams[p];
    } else {
        return '';
    }
}

function myOnLoad() {
    initDHTMLAPI();

	window.onresize=drawPage;
	
	

	myKaMap = new kaMap( 'map' );//prima era viewport

	var szMap = getQueryParam('map');
    var szExtents = getQueryParam('extents');
    var szCPS = getQueryParam('cps');

	  var myKaLegend = new kaLegend( myKaMap, 'legend', false );
    var myKaKeymap = new kaKeymap( myKaMap, 'keymap' );

    myKaMap.registerForEvent( KAMAP_INITIALIZED, null, myInitialized );
    myKaMap.registerForEvent( KAMAP_MAP_INITIALIZED, null, trigger_MapInitialized );
    myKaMap.registerForEvent( KAMAP_SCALE_CHANGED, null, myScaleChanged );
    myKaMap.registerForEvent( KAMAP_EXTENTS_CHANGED, null, myExtentChanged );
    myKaMap.registerForEvent( KAMAP_LAYERS_CHANGED, null, myLayersChanged );
    myKaMap.registerForEvent( KAMAP_QUERY, null, initInfoQuery );
    myKaMap.registerForEvent( KAMAP_MAP_CLICKED, null, myMapClicked );
		
		



    myKaNavigator = new kaNavigator( myKaMap );
    myKaNavigator.activate();

    myKaQuery = new kaQuery( myKaMap, KAMAP_RECT_QUERY );

    //myjwSearch = new jwSearch(myKaMap,"blackboard");
    
    myKaRubberZoom = new kaRubberZoom( myKaMap );

    myScalebar = new ScaleBar(1);
    myScalebar.divisions = 3;
    myScalebar.subdivisions = 2;
    myScalebar.minWidth = 150;
    myScalebar.maxWidth = 180;
    myScalebar.place('scalebar');
	
	
	drawPage();
	
	
	
	//window manager
	setWindowManager();


    myKaMap.initialize( szMap, szExtents, szCPS );
}

/**
 * event handler for KAMAP_MAP_INITIALIZED
 *
 * the scales are put into a select ... this will be used for zooming
 */
function trigger_MapInitialized( eventID, mapName ) {
    //get list of maps and populate the maps select box
    var aMaps = myKaMap.getMaps();
		
		/* tlug Pegelstände */
		initPegelLoad();
}

/**
 * handle the extents changing by updating a link in the interface that links
 * to the current view
 */
function myExtentChanged( eventID, extents ) {
  myKaNavigator.activate();
}

function myLayersChanged(eventID, map) {
}


/**
 * called when kaMap tells us the scale has changed
 */
function myScaleChanged( eventID, scale ) {
    //todo: update scale select and enable/disable zoomin/zoomout
    var currentMap = myKaMap.getCurrentMap();
    var scales = currentMap.getScales();
    for(var i in scales){
        var imgString = 'img'+scales[i];
        var scaleString = 'img'+scale;
        if(getRawObject(imgString)) {
            if(imgString == scaleString) {
                getRawObject(scaleString).src = 'images/pixel-red.png';
            } else {
                getRawObject(imgString).src = 'images/pixel-blue.png';
            }
        }
    }
    myScalebar.update(scale);
    if (scale >= 1000000) {
        scale = scale / 1000000;
        scale = scale + " Million";
    }
    var outString = 'Ma&szlig;stab 1:'+ scale;
    //getRawObject('scale').innerHTML = outString;
}

/**
 * called when the user changes scales.  This will cause the map to zoom to
 * the new scale and trigger a bunch of events, including:
 * KAMAP_SCALE_CHANGED
 * KAMAP_EXTENTS_CHANGED
 */
function mySetScale( scale ) {
    myKaMap.zoomToScale( scale );
}

/**
 * called when the map selection changes due to the user selecting a new map.
 * By calling myKaMap.selectMap, this triggers the KAMAP_MAP_INITIALIZED event
 * after the new map is initialized which, in turn, causes myMapInitialized
 * to be called
 */
function mySetMap( name ) {
    myKaMap.selectMap( name );
}

function myMapClicked( eventID, coords ) {
  checkDeselectPegel();
}

function myZoomIn() {
    myKaMap.zoomIn();
}

function myZoomOut() {
    myKaMap.zoomOut();
}

function toggleToolbar(obj) {
    
}

function toggleKeymap(obj) {

}

function toggleReference(obj) {
 
}

function dialogToggle( href, szObj) {
  
}

/**
 * drawPage - calculate sizes of the various divs to make the app full screen.
 */
function drawPage() {
    var browserWidth = getInsideWindowWidth();
    var browserHeight = getInsideWindowHeight();

    var viewport = getRawObject('viewport');
    //var viewport = getRawObject('mainContainer');

    //Set Viewport Width
    if(myKaMap.isIE4) {
        //terrible hack to avoid IE to show scrollbar
        viewport.style.width = (browserWidth -2) + "px";
    } else {
        viewport.style.width = browserWidth + "px";
    }

    //Set Viewport Height
    if(myKaMap.isIE4) {
        //terrible hack to avoid IE to show scrollbar
        viewport.style.height = (browserHeight -2) + "px";
    } else {
        viewport.style.height = browserHeight + "px";
    }

    myKaMap.resize();
	//if(kaWinMan)drawWindowManager();
	
}


function setWindowManager (){
	kaWinMan = new kaWinManager('viewport', headerSize);
	
	
	//set WinMan background image
	//graphic trick for win manager background
	var imageW = 455;//60
	var imageH = 88;//20
	var viewport = getRawObject('viewport');
	var vieportW = parseInt(viewport.style.width);
	var vieportH = parseInt(viewport.style.height) - headerSize;
	

	//create window instances
	 myKeymapWin = kaWinMan.createWin('myKeymap');
	 myViewportWin = kaWinMan.createWin( mapWindowID );
	 
	 //tlugPegellist = kaWinMan.createWin('myPegellist');
	 tlugPegelinfo = kaWinMan.createWin('myPegelinfo');
	 tlugLegende = kaWinMan.createWin('myLegende');
	 
	 // setup Janus Finder
	 Finder_Init ( document.finderForm.finderList );
	 

	drawWindowManager();
}

function drawWindowManager(){
	var viewport = getRawObject('viewport');
	var vieportW = parseInt(viewport.style.width);
	var vieportH = parseInt(viewport.style.height);

	myKeymapWin.setValues('Referenzkarte',5,vieportH-270,205,230,false,true);
	myKeymapWin.pushContent(getRawObject('keymap'));
	
	myViewportWin.setValues('Kartenansicht',230,0,730,650,false,true);
	myViewportWin.pushContent(getRawObject('map'));
	
	//tlugPegellist.setValues('Pegelliste',5,0,205,200,false,true);
	//tlugPegellist.pushContent(getRawObject('pegellist'));
	
	tlugPegelinfo.setValues('Pegelinfo', 5, 0, 205, 220, false, true);
	tlugPegelinfo.pushContent(getRawObject('pegelinfo'));
	
	tlugLegende.setValues('Legende', 5, 230, 205, 200, false, true);
	tlugLegende.pushContent(getRawObject('pegellegende'));

	
	addDebugMsg("Window Manager erfoglreich initialisiert");	
	addDebugMsg("headerSize: " + headerSize);
}
/**
 * getFullExtent
 * ...
 */
function getFullExtent() {
    var exStr = myKaMap.getCurrentMap().defaultExtents.toString();
    var ex = myKaMap.getCurrentMap().defaultExtents;
    myKaMap.zoomToExtents(ex[0],ex[1],ex[2],ex[3]);
}

/**
 * switchMode
 * ...
 */
function switchMode(id) {
    if (id=='toolQuery') {
        myKaQuery.activate();
        //getRawObject('toolQuery').style.backgroundImage = 'url(layout/images/info_act.gif)';
        getRawObject('toolPan').style.backgroundImage = 'url(layout/images/navigate_off.gif)';
        getRawObject('toolZoomRubber').style.backgroundImage = 'url(layout/images/rubber_zoom_neu2off.gif)';
//        getRawObject('toolSearch').style.backgroundImage = 'url(images/icon_set_nomad/tool_rubberzoom_1.png)';
    } else if (id=='toolPan') {
        myKaNavigator.activate();
        //getRawObject('toolQuery').style.backgroundImage = 'url(layout/images/info_off.gif)';
        getRawObject('toolPan').style.backgroundImage = 'url(layout/images/navigate_act.gif)';
        getRawObject('toolZoomRubber').style.backgroundImage = 'url(layout/images/rubber_zoom_neu2off.gif)';
 //       getRawObject('toolSearch').style.backgroundImage = 'url(images/icon_set_nomad/tool_rubberzoom_1.png)';
    } else if (id=='toolZoomRubber') {
        myKaRubberZoom.activate();
        //getRawObject('toolQuery').style.backgroundImage = 'url(layout/images/info_off.gif)';
        getRawObject('toolPan').style.backgroundImage = 'url(layout/images/navigate_off.gif)';
      //  getRawObject('toolSearch').style.backgroundImage = 'url(images/icon_set_nomad/tool_rubberzoom_1.png)';
        getRawObject('toolZoomRubber').style.backgroundImage = 'url(layout/images/rubber_zoom_neu2.gif)';
/*    } else if (id=='toolSearch') {
        myjwSearch.activate();
        getRawObject('toolQuery').style.backgroundImage = 'url(images/icon_set_nomad/tool_query_1.png)';
        getRawObject('toolPan').style.backgroundImage = 'url(images/icon_set_nomad/tool_pan_1.png)';
        getRawObject('toolZoomRubber').style.backgroundImage = 'url(images/icon_set_nomad/tool_rubberzoom_1.png)';
        getRawObject('toolSearch').style.backgroundImage = 'url(images/icon_set_nomad/tool_rubberzoom_2.png)';*/
	} 
	 else {
        myKaNavigator.activate();
    }
}

/*
 *  applyPNGFilter(o)
 *
 *  Applies the PNG Filter Hack for IE browsers when showing 24bit PNG's
 *
 *  var o = object (this png element in the page)
 *
 * The filter is applied using a nifty feature of IE that allows javascript to
 * be executed as part of a CSS style rule - this ensures that the hack only
 * gets applied on IE browsers :)
 */
function applyPNGFilter(o) {
    var t="images/a_pixel.gif";
    if( o.src != t ) {
        var s=o.src;
        o.src = t;
        o.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+s+"',sizingMethod='scale')";
    }
}

//functions to open popup

function WOFocusWin( nn ) {
	eval( "if( this."+name+") this."+name+".moveTo(50,50); this."+name+".focus();" );
}

function WOOpenWin( name, url, ctrl ) {
    eval( "this."+name+"=window.open('"+url+"','"+name+"','"+ctrl+"');" );

    /*IE needs a delay to move forward the popup*/
    // window.setTimeout( "WOFocusWin(nome);", 300 );
}

function WinOpener() {
    this.openWin=WOOpenWin;
	this.focusWin=WOFocusWin;
}

/* This Function is called by the window manager after stopping resize, fit or maximize */
function resizeEventHandler( winID )
{
 addDebugMsg( "resizeEventHandler(): " + winID );

 //dirty stuff just for kaMap. to be reimplemented
 if ( winID == mapWindowID )
 {
 		myKaMap.resize( true );
  }
}

/* This Function is called by the window manager after stopping resize, fit or maximize */
function moveEventHandler( winID )
{
 addDebugMsg( "moveEventHandler(): " + winID );

 //dirty stuff just for kaMap. to be reimplemented
 //if ( winID == mapWindowID )
 //{
 		refreshQueryPositions();
 // }
}


/* Ajax Loading Status */

var tileLoadingShown = false;
function st_showTileLoading()
{
// if ( tileLoadingShown )
 //{
 	getRawObject('xml_http_status').innerHTML = "LOADING...";
	//tileLoadingShown = true;
	addSPDebug("TILE LOADING");
 //}
}

function st_stopTileLoading()
{
 getRawObject('xml_http_status').innerHTML = "";
 tileLoadingShown = false;
 addSPDebug("TILE STOPPING");
}

/* login on debug manager */
registerStartedComponent( 'jsetup' );

