﻿var BGMap = {
    delimiter: '|',
	homeMarkerItem: null,
    // javascript libraries to include
    Includes: [  'shared/dragdrop.js',
				 'shared/event.js',
				 'map/grid.js',
				 'map/overview.js',
				 'map/marker.js',
				 'map/homemarker.js',
				 'map/layer.js',
				 'map/icon.js', 
				 'map/infowindow.js',
				 'map/overlay.js',
				 'map/mapscroller.js',
				 'map/slider.js',
				 'map/tooltip.js',
				 'map/map.js',
				 'map/metricline.js',
                 'map/list.js',
                 'map/page.js',
				 'map/info-poi.js'],  //need to be added to map control
    /* 
    Includes: [ '_js/main.js'], 
    */

    require: function (libraryName) {
        // inserting via DOM fails in Safari 2.0, so brute force approach
        document.write('<script type="text/javascript" src="' + this.jsroot + libraryName + '"></script>');
    },

    load: function () {
        // check depencies
        if ((typeof Prototype == 'undefined') ||
		   parseFloat(Prototype.Version.split(".")[0] + "." +
					  Prototype.Version.split(".")[1]) < 1.5)
            throw ("Requires the Prototype JavaScript framework >= 1.5.0");

        var mapsource = $('mapsource').src;
        this.jsroot = mapsource.substring(0, mapsource.lastIndexOf('/') + 1);

        $A(this.Includes).each(function (script) {
            BGMap.require(script);
        });
    },

    browserInfo: function () {
        var browsers = ["opera", "msie", "safari", "firefox", "mozilla"];
        var oslist = ["x11;", "macintosh", "windows"];

        var type = -1;
        var os = -1;
        var version = 0;
        var revision = 0;

        var navstring = navigator.userAgent.toLowerCase();

        // Browser check
        for (var i = 0; i < browsers.length; i++) {
            if (navstring.indexOf(browsers[i]) != -1) {
                this.type = i;
                var vCheck = new RegExp(browsers[i] + "[ /]?([0-9]+(.[0-9]+)?)");
                if (vCheck.exec(navstring) != null) {
                    this.version = parseFloat(RegExp.$1);
                }
                break;
            }
        }

        // OS check
        for (var i = 0; i < oslist.length; i++) {
            if (navstring.indexOf(oslist[i]) != -1) {
                this.os = i;
                break;
            }
        }

        // Shorthand properties
        this.opera = this.type == 0 ? true : false;
        this.ie = this.type == 1 ? true : false;
        this.safari = this.type == 2 ? true : false;
        this.firefox = this.type == 3 ? true : false;
        this.mozilla = this.type == 4 ? true : false;
    },

    browserIsCompatible: function () {
        this.b = new this.browserInfo();

        return (this.b.ie && this.b.version >= 5.5)
				|| (this.b.firefox && this.b.version >= 1.0)
				|| (this.b.opera && this.b.version >= 8)
				|| (this.b.mozilla && this.b.version >= 1.7)
				|| (this.b.safari && this.b.version >= 1);
    }
};

/************************************************************
* 							INIT							*
************************************************************/
if(BGMap.browserIsCompatible())
{
	BGMap.load();
}
else
{
	alert("Ihrer Browser ist nicht verträglich mit dem gegenwärtige Version von Stadtplandienst");
}

/************************************************************
* 					SHORTHAND FUNCTIONS						*
************************************************************/
function makeAbsolute()
{
	if(arguments.length == 1)
		arguments[0].style.position = 'absolute';
	else 
		$A(arguments).each( function(el) { el.style.position = 'absolute'; } );
}

function setPosition(el, position)
{
	el.style.top = pix(position.y);
	el.style.left = pix(position.x);
}

function changeCursor(element, cursor)
{
	if(cursor == "pointer" && BGMap.b.ie && BGMap.b.version < 6)
		cursor = "hand";
	element.style.cursor = cursor;
}

String.prototype.setQueryStringVar = function( key, value )   {

    var queryString = this.split("?")[1];
    if (queryString)
    {
        var variables = queryString.split("&");
        var varObj = {};
        for( var i = 0; i < variables.length; i++ ) {
            var temp = variables[i].split("=");
            varObj[temp[0]] = temp[1];
            if( temp[0] == key )
                return this.replace(temp[1], value);
        }
    }
    
    return this;    //if failed
}

/************************************************************
* 						DATA TYPES							*
************************************************************/
function glLongLat(longitude, latitude) {
    this.lat = latitude;
    this.lon = longitude;
}
glLongLat.prototype =
{
    toString: function () { return Math.round(this.lon * 100000) / 100000 + ',' + Math.round(this.lat * 100000) / 100000; },
    equals: function (pos) { return pos.lon == this.lon && pos.lat == this.lat }
};

/**************
*	COOKIES	  *
**************/

function setCookieValue(key, value)
{
    var expires=new Date();
    expires.setFullYear(expires.getFullYear() + 1);
    
    document.cookie=key+'='+value+';path=/;expires='+expires.toUTCString();
}
