/*--------------------------------------------------*/

/*
 * Browser detection code
 */

function Browser ()
{
    var name = navigator.appName;
    if (name == "Netscape")
        this.name = "ns";
    else if (name == "Microsoft Internet Explorer")
        this.name = "ie";

    this.version = navigator.appVersion;
    this.vMajor  = parseInt(this.version);
    this.isNS    = (this.name =="ns" && this.vMajor >= 4);
    this.isNS4   = (this.name =="ns" && this.vMajor == 4);
    this.isNS6   = (this.name =="ns" && this.vMajor == 5);
    this.isIE    = (this.name =="ie" && this.vMajor >= 4);
    this.isIE4   = (this.version.indexOf ('MSIE 4')   >0);
    this.isIE5   = (this.version.indexOf ('MSIE 5')   >0);
    this.isDOM   = (document.createElement
                    && document.appendChild
                    && document.getElementsByTagName) ? true : false;

    var ua = navigator.userAgent.toLowerCase();
    if (ua.indexOf ("win") > - 1)
        this.platform = "win";
    else if (ua.indexOf("mac") > -1)
        this.platform = "mac";
    else
        this.platform="other";
}

/*--------------------------------------------------*/

var browser = new Browser;

/*
 * Map control code
 */

function Map (id, level, sessionId)
{
    this.id        = id;
    this.level     = level;
    this.sessionId = sessionId;
    this.element   = document.getElementById (id);
    this.offset_x  = 0;
    this.offset_y  = 0;

    if (this.element) {
        var el = this.element;
        this.url = el.src;
        if (browser.isDOM && !browser.isIE) {
            while (el.offsetParent) {
                this.offset_x += el.offsetLeft;
                this.offset_y += el.offsetTop;
                el = el.offsetParent;
            }
        }
    }

    this.recenter = function (x, y)
    {
        if (this.element) {
            this.element.src = this.url + "&mapbrowse=center&x=" + (x - this.offset_x) + "&y=" + (y - this.offset_y) + "&rand=" + Math.random ();
        }
    };
    this.zoom = function (level)
    {
        if (this.element) {
            this.element.src = this.url + "&mapbrowse=zoom_" + level + "&rand=" + Math.random ();
            this.level = level;
        }
    };

    this.pan = function (dir)
    {
        if (this.element) {
            this.element.src = this.url + "&mapbrowse=pan_" + dir + "&rand=" + Math.random();
        }
    };

    this.recenterzoom = function (x, y)
    {
        if (this.element) {
           this.element.src = this.url + "&mapbrowse=center_zoom&x=" + (x - this.offset_x) + "&y=" + (y - this.offset_y) + "&rand=" + Math.random ();
            if (map.level < 10) {
                ++this.level;
                showZoomState ();
                showVendor ();
            }
        }
    };

    this.identify = function (x, y)
    {
        url = window.location.protocol + "//"
            + window.location.host + window.location.pathname
            + '?template=identify&transaction=locMap&identifyIcon='
            + this.sessionId
            + '&x=' + (x - this.offset_x) + '&y=' + (y - this.offset_y);

        var width  = 255;
        var height = 255;
        infoWindow = window.open (url,
                   Math.floor (Math.random () * 100000),
                   "height=" + height + ",width=" + width + ",toolbar=no,scrollbars=no,resize=yes");
        infoWindow.moveTo ((screen.width - width) / 2, (screen.height - height) / 2);
    };
}

/*--------------------------------------------------*/

var map;

function mqaMapClick (e)
{
    var x, y;
    if (browser.isIE) {
        if (!(event.button == 1 || (browser.platform == "mac" && event.button == 0))) return;
        x = event.offsetX;
        y = event.offsetY;
    } else if (browser.isDOM) {
        if (e.which != 1) return;
        x = e.pageX;
        y = e.pageY;
    }

    if (document.mapClick.clickAction[0].checked) {
        // Zoom
        mqaMapZoomIn ();
    } else if (document.mapClick.clickAction[1].checked) {
        // Recenter
        map.recenter (x, y)
    } else if (document.mapClick.clickAction[2].checked) {
        // Identify Icon
        if (document.mapClick.clickAction[2].value == 'identify') {
            map.identify (x, y);
        } else {
            map.recenterzoom (x, y);
        }
    }
}

/*--------------------------------------------------*/

function mqaMapInit (id, level, sessionId)
{
    map = new Map (id, level, sessionId);
    if (map.element) {
        if (browser.isIE) {
            map.element.onmouseup = mqaMapClick;
        } else if (browser.isDOM) {
            map.element.addEventListener ("mouseup", mqaMapClick, true);
        }
        showZoomState ();
        showVendor ();
    }
}

/*--------------------------------------------------*/

function mqaMapZoom (level)
{
    if (! map) {
        /* alert ('you must call mqaMapInit(mapurl) before you can call this function'); */
    } else {
        map.zoom (level);
        showZoomState ();
        showVendor ();
    }
}

/*--------------------------------------------------*/

function mqaMapZoomIn (name)
{
    if (map.level < 10)
        mqaMapZoom (map.level + 1);
}
/*--------------------------------------------------*/

function mqaMapZoomOut (name)
{
    if (map.level > 1)
        mqaMapZoom (map.level - 1);
}

/*--------------------------------------------------*/

function showZoomState ()
{
    for (var i = 1; i <= 10; ++i) {
        var image = i == map.level ? 'zoom_on.gif' : 'zoom.gif';
        eval ("document.zoom" + i + ".src='/mqsa_resources/" + image + "'");
    }
}

/*--------------------------------------------------*/

function showVendor ()
{
    if (! document.vendor) return;

    if ((map.level <= 10) && (map.level >= 6))
    {
      var vendImage = 'navteq.gif';
    } else {
      var vendImage = 't.gif';
    }
    eval ("document.vendor.src='/mqsa_resources/" + vendImage + "'");
}

/*--------------------------------------------------*/

function mqaMapPan (dir)
{
    if (! map) {
        /* alert ('you must call mqaMapInit(mapurl) before you can call this function'); */
    } else {
        map.pan (dir);
    }
}

/*--------------------------------------------------*/

