// Clicktracking
function n() {

    if ( !arguments ) {
                return true;
    }

    for ( var i = 1; i < arguments.length; i++ ) {
		var pageTracker = _gat._getTracker("UA-9017715-5");
                pageTracker._trackPageview("/nl-menu.nl/" + arguments[ i ] );

   }

    if ( typeof arguments[0] != 'undefined' && arguments[0] ) {
                if ( arguments[0].target && arguments[0].target == '_blank' ) {
                return true;
                }

                setTimeout( 'document.location.href = \''+arguments[0].href+'\';', 300 );
                return false;
    }
    return true;
}

// show banner and skyscraper ads
//
function filldiv(name, content)
	{
		document.getElementById(name + "div").innerHTML = content;
		document.getElementById(name + "div").style.display = "inline";
		document.getElementById(name + "iframe").style.display = "none";
	}	

function lb()
{
    initializeGTracking();
    
    if (document.getElementById)
    {
        bind();
        
        clear_form();

        var el = document.getElementById('makehome');
        if (el && el.addBehavior)
        {
            el.addBehavior('#default#homepage');
            if (typeof(curUrl) != 'undefined' && !el.isHomePage(curUrl))
                el.style.display = 'block';
        }
    }
}

function clear_form()
{
    var fc = document.getElementById("fc");
    if(fc && fc.value.length > 4)
        fc.value = fc.value.substr(0, 4);
}

function mh()
{
    var el = document.getElementById('makehome');
    if (el && el.addBehavior && typeof(curUrl) != 'undefined')
    {
        el.setHomePage(curUrl);

        if (el.isHomePage(curUrl))
            el.style.display = 'none';
    }
}

function bind_method(el, evt, mth, cap)
{
    if (el.addEventListener)
        el.addEventListener(evt, mth, cap);
    else if (el.attachEvent && !cap)
        el.attachEvent('on' + evt, mth);
    else if (el.setAttribute && !cap)
        el.setAttribute('on' + evt, mth);
}

function unbind_method(el, evt, mth, cap)
{
    if (el.removeEventListener)
        el.removeEventListener(evt, mth, cap);
    else if (el.detachEvent && !cap)
        el.detachEvent('on' + evt, mth);
}

function bind()
{
    buildManualGo();

    var el = document.getElementById('vertical_navigation');
    if (el)
    {
        el = el.lastChild;
        if (el && el.tagName == 'UL')
        {
            var liColl = el.childNodes;
            for (var i = 0; i < liColl.length; i++)
            {
                var a = liColl.item(i).firstChild;
                if (a.tagName == 'A')
                    a.onclick = click_Vertical;
            }
        }
    }

    el = document.getElementById('trygeocombo');
    if (el)
    {
        bind_method(el, 'change', change_TryGeo);

        el = document.getElementById('trygeobtn');
        if (el)
            el.style.display = 'none';
    }

    el = document.getElementById('languages');
    if (el)
    {
        var divs = el.childNodes;
        if (divs)
        {
            for (var i = 0; i < divs.length; i++)
                bind_method(divs.item(i).firstChild, 'click', select_LanguageFilter);
        }
    }

    el = document.getElementById('q');
    if (el)
    {
        if (el.focus && IsHomepage())
        {
            el.focus();
        }
        
        bind_method(el, 'keypress', keypress_Q, true);
    }

    el = document.getElementById('ads_topC');
    if (el)
        bindAdHandler(el);

    el = document.getElementById('ads_rightC');
    if (el)
        bindAdHandler(el);

    el = document.getElementById('ads_bottomC');
    if (el)
        bindAdHandler(el);

    el = document.getElementById('srch_btn_near');
    if (el)
        bind_method(el, 'click', click_near, false);

    window.onresize = resizeHandler;
}

function click_near()
{
    var form = document.getElementById('qf');
    if (form)
        form.action = '/local/results.aspx';
}

function bindAdHandler(el)
{
    for (var i = 0; i < el.childNodes.length; i++)
    {
        var ul = el.childNodes.item(i);
        if (ul.tagName == 'UL')
        {
            for (var j = 0; j < ul.childNodes.length; j++)
            {
                var li = ul.childNodes.item(j);
                if (li.tagName == 'LI')
                {
                    handler = new AdHandler(li);
                    bind_method(li, 'click', handler.click);
                    bind_method(li, 'mouseover', handler.mouseover);
                    bind_method(li, 'mouseout', handler.mouseout);
                }
            }

            break;
        }
    }
}

function AdHandler(el)
{
    var me = el;

    this.click = function(evt)
    {
        var srcEl = evt.srcElement ? evt.srcElement : evt.target;
        if (srcEl.tagName != 'A' && srcEl.tagName != 'STRONG')
        {
            if (me.firstChild.firstChild.target == '_blank')
                window.open(me.firstChild.firstChild.href)
            else
                window.location.href = me.firstChild.firstChild.href;
        }
    }

    this.mouseover = function(evt)
    {
        window.status = me.firstChild.firstChild.href;
    }

    this.mouseout = function(evt)
    {
        window.status = '';
    }
}

function keypress_Q(evt)
{
    if (evt.keyCode)
    {
        if (evt.keyCode == 13)
        {
            var q = document.getElementById('q');
            var qf = document.getElementById('qf');
            if (qf && q && q.value != '')
            {
                if (evt.preventDefault)
                    evt.preventDefault();

                qf.submit();
                return false;
            }
        }
    }

    return true;
}

function keydown_Go(evt)
{
    //if the keycode is not enter, up, down, or escape, don't do anything
    if(evt.keyCode)
    {
        var btnOpt = document.getElementById('srch_btn_opt');
        if(!btnOpt)
            return;

        var i = 0;
        var options = btnOpt.childNodes;
        if(evt.keyCode == 13) //enter
        {
            if(btnOpt.style.display == "block") //fire click on selected element
            {
                for(i = 0; i < options.length; i++)
                {
                    if(options.item(i).className == "selected")
                    {
                        if(document.createEvent)
                        {
                            var clickEvent = document.createEvent('MouseEvents');
                            clickEvent.initEvent('click',true,true);
                            options.item(i).dispatchEvent(clickEvent);
                        }
                        else if(options.item(i).fireEvent)
                        {
                            options.item(i).fireEvent('onclick');
                        }
                        break;
                    }
                }

                if (evt.preventDefault)
                    evt.preventDefault();
                    
                return false;
            }

            return;
        }
        
        if(evt.keyCode == 9) //tab
        {
            hideManualGo(btnOpt);
        }

        if(evt.keyCode == 27) //escape
        {
            hideManualGo(btnOpt);
            if (evt.preventDefault)
                evt.preventDefault();

            return false;
        }

        if(evt.keyCode != 38 && evt.keyCode != 40)
            return;

        if(btnOpt.style.display != "block")
            showManualGo(btnOpt);

        var newOption = -1;
        for (i = 0; i < options.length; i++)
        {
            if(options.item(i).className == 'selected')
            {

                if(evt.keyCode == 40) //down key
                {
                    if(i == options.length - 1)
                        newOption = 0; //wrap
                    else
                        newOption = i + 1;
                }
                else if (evt.keyCode == 38) //up key
                {
                    if(i == 0)
                        newOption = options.length - 1; //wrap
                    else
                        newOption = i - 1;
                }
            }
            options.item(i).className = '';
        }

        if(newOption == -1)
            newOption = 0; //we opened the menu by hitting the down or up key

        if(newOption >= 0 && newOption < options.length)
        {
            options.item(newOption).className = 'selected';
        }

        if (evt.preventDefault)
            evt.preventDefault();
            
        return false;
    }
}

function keypress_Go(evt)
{
    if(evt.keyCode)
    {    
        var btnOpt = document.getElementById('srch_btn_opt');
        if(!btnOpt)
            return true;
        if((evt.keyCode == 13 && btnOpt.style.display == 'block') ||
            evt.keyCode == 27 || evt.keyCode == 38 || evt.keyCode == 40)
        {
            if(evt.preventDefault)
                evt.preventDefault();
        
            return false;
        }
    }
    return true;
}

function select_LanguageFilter(evt)
{
    var el = document.getElementById('langlimit');
    if (el)
        el.checked = true;
}

function scrollHlt()
{
    var content = document.getElementById('content');
    if(!content)
        return;
    var hlt = null;
    for(var i = 0; i < content.childNodes.length; i++)
    {
        if(content.childNodes[i].className.indexOf(' highlight') > 0)
        {
            hlt = content.childNodes[i];
            break;
        }
    }
    if(hlt && typeof(hlt.scrollIntoView) != 'undefined')
        hlt.scrollIntoView(true);
}

function click_Vertical()
{
    var qElem = document.getElementById("q");
    if(!qElem)
        return;
    var q = qElem.value;

    var el = document.getElementById("w");
    if (el)
        q = q + " " + el.value;

    if (window.encodeURIComponent)
        q = encodeURIComponent(q);
    else
        q = quasiUriEncode(q);

    if (this.href.indexOf('?') > -1)
        this.href = this.href + '&q=' + q;
    else
        this.href = this.href + '?q=' + q;
}

function click_VerticalA(a)
{
    var q = document.getElementById("q").value;
    if (window.encodeURIComponent)
        q = encodeURIComponent(q);
    else
        q = quasiUriEncode(q);

    if (a.href.indexOf('?') > -1)
        a.href = a.href + '&q=' + q;
    else
        a.href = a.href + '?q=' + q;
}

function quasiUriEncode(q)
{
    var i = 0;
    while(i < q.length)
    {
        var ch = q.charAt(i);
        var rep = "";
        if(ch == " ") rep = "+";
        else if(ch == "+") rep = "%2B";
        else if(ch == "&") rep = "%26";
        else if(ch == "=") rep = "%3D";

        if(rep.length > 0)
        {
            q = q.substr(0,i) + rep + q.substr(i + 1);
            i += rep.length;
        }
        else
        {
            i++;
        }
    }
    return q;
}


function change_TryGeo(evt)
{
    var el = document.getElementById('trygeocombo');
    if (el)
    {
        if (el.selectedIndex > 0)
        {
            var tgf = document.getElementById('tgf');
            if(tgf)
                tgf.submit();
            return false;
        }
    }
}

function toggleQB(show)
{
    if(typeof(document.getElementById) == 'undefined')
        return;

    var qb = document.getElementById("qb");
    if(qb)
    {
        if(show && qb.style.display == "none")
        {
            qb.style.display = "block";
            show = true;
        }
        else
        {
            show = false;
            qb.style.display = "none";
        }
    }
    else if (show)
    {
        var qs = location.search;
        var idx = location.search.indexOf('?q=');
        if (idx == -1)
            idx = location.search.indexOf('&q=');
        if (idx != -1)
        {
            qs = location.search.substr(0, idx);
            idx = location.search.indexOf('&', idx + 3);
            if (idx != -1 && idx + 1 < location.search.length)
            {
                if (qs.length > 0)
                    qs += "&" + location.search.substr(idx + 1);
                else
                    qs += "?" + location.search.substr(idx + 1);
            }
        }

        idx = location.search.indexOf('?qb=');
        if (idx == -1)
            idx = location.search.indexOf('&qb=');
        if (idx == -1)
        {
         if (qs.length > 0)
                qs += "&qb=1";
        else
                qs += "?qb=1";
        }

        var q = document.getElementById("q").value;
        if (window.encodeURIComponent)
            q = encodeURIComponent(q);
    else
            q = quasiUriEncode(q);
        if (qs.length > 0)
                qs += "&q=" + q;
        else
                qs += "?q=" + q;

        location.search = qs;
    }

    var qbCommand = document.getElementById("qb_command");
    if(qbCommand)
    {
        qbCommand = qbCommand.firstChild;
        if(show)
            qbCommand.innerHTML = "-" + qbCommand.innerHTML.substr(1);
        else
            qbCommand.innerHTML = "+" + qbCommand.innerHTML.substr(1);
    }
}

function resizeHandler()
{
    var bWide = document.body.clientWidth > 980;

    var idx = document.body.className.indexOf(" wide");
    if (idx >= 0 && !bWide)
        document.body.className = document.body.className.substr(0, idx);
    else if (idx < 0 && bWide)
        document.body.className = document.body.className + " wide";

    if(typeof(qb_reposition) != 'undefined')
        qb_reposition();
}

function buildManualGo()
{
    if ((navigator.platform.indexOf("Mac") != -1) && ((navigator.userAgent.indexOf("MSIE") > -1) || (navigator.userAgent.indexOf("Safari") > -1)))
        return;
     
    if(typeof(document.getElementById) == 'undefined')
        return;

    var el = document.getElementById('srch_btn');
    var select = document.getElementById('srch_type');
    if (el && select)
    {
        var btn = document.createElement('button');
        btn.id = 'srch_btn_go';
        bind_method(btn, 'keydown', keydown_Go);
        bind_method(btn, 'keypress', keypress_Go);
        var container = document.createElement('span');
        container.className = 'trbbdr';

        container.insertBefore(btn, null);

        var span = el.parentNode;
        span.parentNode.insertBefore(container, select);
        span.parentNode.removeChild(span);
        container.parentNode.insertBefore(span, container);

        bind_method(btn, 'click', click_ManualGo);
        var menu = document.createElement('div');
        menu.id = 'srch_btn_opt';
        select.parentNode.insertBefore(menu, select);

        var options = select.childNodes;
        for (var i = 0; i < options.length; i++)
        {
            var div = document.createElement('div');
            if (div)
            {
                handler = new ManualGoHighlighter(div, options.item(i).value);
                bind_method(div, 'click', handler.click);
                bind_method(div, 'mouseover', handler.mouseover);
                bind_method(div, 'mouseout', handler.mouseout);
                var text = '';
                if(typeof(options.item(i).textContent) != 'undefined')
                     text = options.item(i).textContent;
                else if(typeof(options.item(i).innerText) != 'undefined')
                     text = options.item(i).innerText;
                else if(typeof(options.item(i).firstChild) != 'undefined' && typeof(options.item(i).firstChild.nodeValue) != 'undefined')
                     text = options.item(i).firstChild.nodeValue;
                var itemText = document.createTextNode(text);
                div.appendChild(itemText);
                menu.appendChild(div);
            }
        }
        select.parentNode.removeChild(select);
    }
}

function click_ManualGo(evt)
{
    var btnOpt = document.getElementById('srch_btn_opt');
    if (btnOpt)
    {
        if (btnOpt.style.display == 'block')
            hideManualGo(btnOpt);
        else
            showManualGo(btnOpt);

        if (evt.preventDefault)
            evt.preventDefault();
        else
            return false;
    }
}

function IsHomepage()
{
    return document.body.className.indexOf("hp") >= 0;
}

function showManualGo(btnOpt)
{
    toggleQB();

    var btnSrch = document.getElementById('srch_btn').parentNode;
    var btnGo = document.getElementById('srch_btn_go').parentNode;
    if (btnSrch && btnGo)
    {
        var e = btnSrch;
        var l = 0;
        var t = 0;
        while (e)
        {
            l += e.offsetLeft;
            t += e.offsetTop;

            e = e.offsetParent;
        }
        btnOpt.style.zIndex = 200;
        btnOpt.style.position = "absolute";
        btnOpt.style.left = (l - 1) + 'px';
        btnOpt.style.top = (t + btnSrch.offsetHeight) + 'px';
        btnOpt.style.display = "block";

        var newWidth = btnSrch.offsetWidth + btnGo.offsetWidth - 1;
        var options = btnOpt.childNodes;
        var i;
        for (i = 0; i < options.length; i++)
        {
            if(options.item(i).offsetWidth > newWidth)
                newWidth = options.item(i).offsetWidth;
        }

        if (newWidth > btnOpt.offsetWidth)
            btnOpt.style.width = newWidth + "px";
        else
            newWidth = btnOpt.offsetWidth;

        for (i = 0; i < options.length; i++)
        {
            var div = options.item(i);
            div.style.width = (newWidth - 12) + "px";
        }
    }
}

function hideManualGo(btnOpt)
{
    btnOpt.style.display = 'none';

    var options = btnOpt.childNodes;
    for (var i = 0; i < options.length; i++)
    {
        options.item(i).className = '';
    }
}

function ManualGoHighlighter(el, act)
{
    var me = el;
    var srch_type = act;

    this.mouseover = function(evt)
    {
        var btnOpt = document.getElementById('srch_btn_opt');
        if (btnOpt)
        {
            var options = btnOpt.childNodes;
            for (var i = 0; i < options.length; i++)
            {
                options.item(i).className = '';
                if (options.item(i) == me)
                    options.item(i).className = 'selected';
            }
        }
    }

    this.mouseout = function(evt)
    {
        me.className = '';
    }

    this.click = function(evt)
    {
        hideManualGo(document.getElementById('srch_btn_opt'));

        var q = document.getElementById("q");
        var qf = document.getElementById("qf");
        var fc = document.getElementById("fc");
        if(fc && fc.value.length <= 4)
           fc.value = fc.value + "2";
        var inputNode = document.createElement("input");
        inputNode.type = "hidden";
        inputNode.name = "srch_type";
        inputNode.value = srch_type;
        q.parentNode.insertBefore(inputNode, q);
        qf.submit();
    }
}

var EARTH_RADIUS = 6378.135;
var EARTH_CIRCUMFERENCE = Math.PI * EARTH_RADIUS;
var RAD_PER_DEGREE = (2 * Math.PI) / 360;

var map = null;

var mapZoom = 5;
var mapExtentX = 0.0;
var mapExtentY = 0.0;
var mapPanX = 0.0;
var mapPanY = 0.0;
var mapContainer = null;
var mapDragEnabled = false;
var hilitedResult = null;
var hilitedMark = null;
var drag = false;
var dragX = 0;
var dragY = 0;
var mapPushpins = null;
var useVEMap = false;

function lp()
{
    if (document.getElementById('map_viewVE'))
    {
        useVEMap = true;
        UpdateMap();
    }
    else
    {
        mapContainer = document.getElementById('map');
        if (!mapContainer)
            return;
        addEventListenerEx(mapContainer, 'mousedown', DragStart, true);
        addEventListenerEx(mapContainer, 'mousemove', Drag, true);
        addEventListenerEx(mapContainer, 'mouseup', DragEnd, false);
        addEventListenerEx(mapContainer, 'mouseout', DragAutoEnd, false);
        addEventListenerEx(mapContainer, 'draggesture', Cancel, false);
        addEventListenerEx(mapContainer, 'dragstart', Cancel, false);
        addEventListenerEx(mapContainer.firstChild, 'load', MapLoad);
        mapDragEnabled = true;
        mapPushpins = p();
        if (cX == 0.0 || cY == 0.0 || mapPushpins.length == 0)
            return;
        PanCenter();
    }
}

function MapLoadFailed()
{
    return (document.cookie.indexOf('SUCCESS=0') != -1);
}

function UpdatePushpins()
{
    while (mapContainer.childNodes.length > 1)
        mapContainer.removeChild(mapContainer.lastChild);

    if (MapLoadFailed())
        return;

    var m = '';
    var kmPerPixel = KilometersPerPixel(mapZoom);
    var pxPerDegX = PixelsPerDegreeX(kmPerPixel, cY);
    var pxPerDegY = PixelsPerDegreeY(kmPerPixel);
    var offsetX = mapWidth / 2 - mapPanX * mapWidth;
    var offsetY = mapHeight / 2 + mapPanY * mapHeight;
    var labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    if (isDetailPage)
        labels = "                          ";
    for (var i = 0; i < mapPushpins.length; i++)
    {
        var n = mapPushpins[i];
        var x = Math.round((n.x - cX) * pxPerDegX) + offsetX;
        var y = Math.round((n.y - cY) * -pxPerDegY) + offsetY;

        var pinClass = "";
        var resultItem = document.getElementById('r' + i);
        if (resultItem != null)
        {
            if (resultItem .className.indexOf("hilite") >= 0)
                pinClass = 'class="hilite" ';
        }

        m = '<span title="' + n.n + '" ' + pinClass + 'onmouseover="hp(' + i + ')" onmouseout="hp(null)" style="left:' + (x + 9) + 'px;top:' + y + 'px" id="p' + i + '"><a class="' + n.t + 'p">' + (labels.substr(i, 1)) + '</a></span>' + m;
    }
    
    var pushpins = document.createElement('div');
    pushpins.id = 'pushpins';
    pushpins.innerHTML = m;
    mapContainer.appendChild(pushpins);
}

function hp(pin)
{
    if (hilitedResult)
        removeClassName(hilitedResult, "hilite");
    if (hilitedMark)
    {
        removeClassName(hilitedMark, "hilite");
        if (useVEMap)
        {
            hilitedMark.parentElement.style.zIndex = 20 - pin;
        }
    }

    if (pin != null)
    {
        hilitedResult = document.getElementById('r' + pin);
        hilitedMark = document.getElementById('p' + pin);

        if (hilitedResult)
            addClassName(hilitedResult, "hilite");
        if (hilitedMark)
        {
            addClassName(hilitedMark, "hilite");
            if (useVEMap)
            {
                hilitedMark.parentElement.style.zIndex = 99;
            }
        }
    }
}

function clickpin(pin)
{
    var n = mapPushpins[pin];
    if (n == null)
        return;

    if (useVEMap)
    {
        map.SetCenter(n.y, n.x);
    }
    else
    {
        var kmPerPixel = KilometersPerPixel(mapZoom);
        var pxPerDegX = PixelsPerDegreeX(kmPerPixel, cY);
        var pxPerDegY = PixelsPerDegreeY(kmPerPixel);

        var dx = (n.x - cX) * pxPerDegX;
        var dy = (n.y - cY) * pxPerDegY;

        mapPanX = dx / mapWidth;
        mapPanY = dy / mapHeight;

        UpdateMap();
    }
}


function UpdateMap()
{
    if (useVEMap)
    {
        if (map == null)
        {
            var params = new Object();
            params.latitude = cY;
            params.longitude = cX;
            params.zoomlevel = 6;
            params.mapstyle = 'r';
            params.showScaleBar = true;
            
            params.showDashboard = true;
            params.dashboardSize = "small";
            params.dashboardX = 3;
            params.dashboardY = 3;
                
            map = new Msn.VE.MapControl(document.getElementById("pushpins"), params);
            map.Init();
            
            map.SetViewport(mapNorth, mapEast, mapSouth, mapWest);
            if (map.GetZoomLevel() > 15)
                map.SetZoom(15);
            UpdatePushpinsVE();
        }
    }
    else
    {
        map = mapContainer.firstChild;
        if (!map)
            return;
        var kmPerPixel = KilometersPerPixel(mapZoom);
        mapExtentX = kmPerPixel * mapWidth;
        mapExtentY = kmPerPixel * mapHeight;
        if (mapDefaultView)
        {
            map.src = '/maps/render.aspx?w=' + mapWidth + '&h=' + mapHeight + '&k=' + mapKey + '&i=' + mapPanX + '&j=' + mapPanY + '&x=' + mapExtentX + '&y=' + mapExtentY + '&c=' + cY + '%2c' + cX;
        }
        else // satellite
        {
            var pxPerDegX = PixelsPerDegreeX(kmPerPixel, cY);
            var pxPerDegY = PixelsPerDegreeY(kmPerPixel);
            var lon = cX + mapPanX * mapWidth / pxPerDegX;
            var lat = cY + mapPanY * mapHeight / pxPerDegY;
            map.src = terraServer + '&s=' + (mapZoom + 7) + '&lon=' + lon + '&lat=' + lat + '&w=' + mapWidth + '&h=' + mapHeight;
        }
    }
}

function UpdatePushpinsVE()
{
    if (map == null)
        return;
        
    map.ClearPushpins();
    
    mapPushpins = p();
    
    var labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    if (isDetailPage)
        labels = "                          ";
    for (var i = 0; i < mapPushpins.length; i++)
    {
        var n = mapPushpins[i];

        var classname = "";
        if (i == 0)
        {
            classname = "hilite";
        }
        m = '<span title="' + n.n + '"  style="left:13px;top:13px" onmouseover="hp(' + i + ')" onmouseout="hp(null)" id="p' + i + '"><a class="yp">' + (labels.substr(i, 1)) + '</a></span>';
        
        var el = map.AddPushpin(i, n.y, n.x, 20, 20, classname, m, 20-i);
    }
}

function Pan(x, y)
{
    mapPanX += x * 0.3;
    mapPanY += y * 0.3;
    UpdateMap();
}

function PanCenter()
{
    mapPanX = 0.0;
    mapPanY = 0.0;
    var z = 1;
    var kmPerPixel = KilometersPerPixel(z);
    var pxPerDegX = PixelsPerDegreeX(kmPerPixel, cY);
    var pxPerDegY = PixelsPerDegreeY(kmPerPixel);
    for (var i = 0; i < mapPushpins.length; i++)
    {
        var n = mapPushpins[i];
        while(z < (mapDefaultView ? 9 : 7))
        {
            var dX = Math.abs(n.x - cX) * pxPerDegX;
            var dY = Math.abs(n.y - cY) * pxPerDegY;
            if (dX < mapWidth / 2 && dY < mapHeight / 2)
                break;
            z++;
            kmPerPixel = KilometersPerPixel(z);
            pxPerDegX = PixelsPerDegreeX(kmPerPixel, cY);
            pxPerDegY = PixelsPerDegreeY(kmPerPixel);
        }
    }
    HilightZoom(z);
    UpdateMap();
}

function HilightZoom(i)
{
    var zoom = document.getElementById('map_zoom' + mapZoom);
    if (zoom)
        zoom.className = 'map_slider';
    mapZoom = i;
    var zoom = document.getElementById('map_zoom' + mapZoom);
    if (zoom)
        zoom.className = 'map_slider hilight';
}

function Zoom(i)
{
    var max = (mapDefaultView ? 9 : 7);
    if (i < 1)
        i = 1;
    else if (i > max)
        i = max;
    if (i != mapZoom)
    {
        var f = Math.pow(2, mapZoom - i);
        mapPanX *= f;
        mapPanY *= f;
    }
    HilightZoom(i);
    UpdateMap();
}

function ZoomIn()
{
    Zoom(mapZoom - 1);
}

function ZoomOut()
{
    Zoom(mapZoom + 1);
}

function addEventListenerEx(EventSource,EventType,EventHandler,captures) {
    captures = (captures) ? captures : false;
    if ( document.addEventListener ) {
        EventSource.addEventListener(EventType,EventHandler,captures);
    } else if (document.attachEvent) {
        EventType = 'on' + EventType;
        EventSource.attachEvent(EventType,EventHandler);
    } else {
        EventType = 'on' + EventType;
        EventSource[EventType] = EventHandler;
    }
}

function DragStart(evt)
{
    if (!mapDragEnabled)
        return;
    drag = true;
    dragX = evt.clientX;
    dragY = evt.clientY;
}

function Drag(evt)
{
    if (!mapDragEnabled || !drag)
        return false;
    var map = mapContainer.firstChild;
    if (!map)
        return false;
    var dX = evt.clientX - dragX;
    var dY = evt.clientY - dragY;
    map.style.left = dX + 'px';
    map.style.top = dY + 'px';
    var pushpins = document.getElementById('pushpins');
    if (pushpins)
    {
        pushpins.style.left = dX + 'px';
        pushpins.style.top = dY + 'px';
    }
    evt.cancelBubble = true;
    return false;
}

function DragAutoEnd(evt)
{
    if (!mapDragEnabled || !drag)
        return;
    var bounds = mapContainer.getBoundingClientRect();
    var x = evt.clientX;
    var y = evt.clientY;
    if (x < bounds.left || x >= bounds.right || y < bounds.top || y >= bounds.bottom)
        DragEnd(evt);
}

function DragEnd(evt)
{
    if (!mapDragEnabled || !drag)
        return;
    drag = false;
    var map = mapContainer.firstChild;
    if (!map)
        return;
    var dX = evt.clientX - dragX;
    var dY = evt.clientY - dragY;
    if (dX == 0 && dY == 0)
        return;
    mapDragEnabled = false;
    mapPanX += -(dX / mapWidth);
    mapPanY += dY / mapHeight;
    var newMap = document.createElement('img');
    newMap.className = 'map';
    newMap.style.display = 'none';
    mapContainer.insertBefore(newMap, map);
    addEventListenerEx(newMap, 'load', MapLoad);
    UpdateMap();
}

function Cancel(evt)
{
    evt.cancelBubble = true;
}

function MapLoad(evt)
{
    if (MapLoadFailed() && window.location.hash != "#reloadmap")
        window.location.href = window.location.href + "#reloadmap";
    
    UpdatePushpins();
    var map = mapContainer.firstChild;
    if (!map)
        return;
    map.style.display = '';
    mapDragEnabled = true;
}

function MapView(view)
{
    var isDefault = (view == 'default');
    if (isDefault == mapDefaultView)
        return;
    mapDefaultView = isDefault;
    var v = document.getElementById('map_view');
    if (!v)
        return;
    v.className = 'view_' + view;
    var z = (mapDefaultView ? mapZoom - 3 : mapZoom + 3);
    HilightZoom(z);
    mapZoom = z;
    Zoom(mapZoom);
}

function Distance(lat1, lon1, lat2, lon2)
{
    var dlon = lon2 - lon1;
    var dlat = lat2 - lat1;
    var a = Math.pow(Math.sin(dlat / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon / 2), 2);
    var d = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    return EARTH_RADIUS * d;
}

function KilometersPerPixel(zoom)
{
    return Math.pow(2, zoom + (mapDefaultView ? 0 : -3)) / 1000
}

function PixelsPerDegreeX(kmPerPixel, latitude)
{
    return Distance(RAD_PER_DEGREE * latitude, 0.0, RAD_PER_DEGREE * latitude, RAD_PER_DEGREE) / kmPerPixel;
}

function PixelsPerDegreeY(kmPerPixel)
{
    return EARTH_CIRCUMFERENCE / 180.0 / kmPerPixel;
}

function addClassName(el, className)
{
    var idx = el.className.indexOf(className);
    if (idx < 0)
    {
        if (el.className.length > 0)
            el.className = el.className + " " + className;
        else
            el.className = className;
    }
}

function removeClassName(el, className)
{
    var idx = el.className.indexOf(className);
    if (idx >= 0)
    {
        el.className = el.className.substr(0, idx) + el.className.substr(idx + className.length);
    }
}

function sendToMobile(mobileData, linkText, displaySpanid )
{
    //In case server is down - To avoid Page error's
    if (self.Mobile_Widget)
    {
        var mwid = new Mobile_Widget(mobileData, 2, linkText);
        var teid = document.createTextNode(" |");
        var spanid = document.createElement("span");
        spanid.className="mobileseperator";
        spanid.appendChild (teid);
        mwid.SetParent (displaySpanid);
        mwid.ForcePosition(null, null);
        mwid.SetTrailingElement(spanid);
        widgetManager.AddWidget(mwid);   
    }
}

function clickToCall(merchantData, linkText, displaySpanid )
{
    //In case server is down - To avoid Page error's
    if (self.MPCall_Widget)
    {
        var mpcid = new MPCall_Widget(merchantData, 2,linkText);
        var mpcteid = document.createTextNode(" |");
        var mpcspanid = document.createElement("span");
        mpcspanid.className="mobileseperator";
        mpcspanid.appendChild (mpcteid);
        mpcid.SetParent (displaySpanid);
        mpcid.ForcePosition(null, null);
        mpcid.SetTrailingElement(mpcspanid);
        mpcWidgetManager.AddWidget(mpcid);                    
    }
}

function mpcallpreopencb(str)
{
    var mobile;

    if (str == "mpcall")
    {
        if (self.Mobile_GetOpenWindow)
            mobile = Mobile_GetOpenWindow();
    }
    else if (self.MPCall_GetOpenWindow)
        mobile = MPCall_GetOpenWindow(); 


    if (mobile != null) 
       mobile.HideIframe();
}
 
function preopencb(str)
{
    var call;

    if (str == "snd2m" ) 
    {
        if (self.MPCall_GetOpenWindow)
            call= MPCall_GetOpenWindow(); 
    }
    else if (self.Mobile_GetOpenWindow)
        call= Mobile_GetOpenWindow();

    if (call != null)
        call.HideIframe();
}

function initializeGTracking()
{
    tracker = new Search.GLink();
}

Search = function(){}
Search.GLink = function()
{
    var TIMEOUT = 3 * 1000;
    var _timer = null;
    var _pinging = false;
    var _img = null;
    var _bIsIE = false;
    var _pendingAddress = "";

    bind_method(document.body, "click", onClick, false);
    bind_method(window, "unload", onUnload, false);

    if(document.body.attachEvent)
    {
        _bIsIE = true;
    }
    else if(document.body.addEventListener)
    {
        _bIsIE = false;
    }    

    //BUGBUG: In FF we get the evt.shiftKey modifier only when you *don't* click on 
    // an element that is bolded (a search term)
    function onClick(theEvent)
    {
        var evt;
        var src;
        var retVal = true;

        if(_bIsIE)
        {
            evt = window.event;
            src = evt.srcElement
        }
        else
        {
            evt = theEvent;
            src = evt.target;            
        }

        src = getPingElement(src);
        if(src == null)
        {
            return;
        }

        if(src.attributes["target"] || evt.shiftKey == true)
        {
            _img = new Image();
            _img.src = src.attributes["gping"].value;
            return true;
        }
        
        _pendingAddress = src.href;
        retVal = false;

        if(_bIsIE)
        {
            evt.returnValue = false;
        }
        else
        {
            evt.preventDefault();    
        }
        doPing(src.attributes["gping"].value);

        return retVal;
    }

    function getPingElement(src)
    {
        var retVal = src;
        while( !src.attributes["gping"] )
        {
            src = src.parentElement;
            if(src == null || src.attributes["gping"])
            {
                retVal = src;
                break;
            }
        }
        return retVal;
    }

    function doPing(payload)
    {
        _img = new Image();
        
        bind_method(_img, "load", onPingComplete, false);
        _img.src = payload;
       _timer = setTimeout(onPingComplete, TIMEOUT);
    }

    function onPingComplete()
    {
        resetTimeout();
        doNav();
    }

    function resetTimeout()
    {
        if(_timer)
        {
            clearTimeout(_timer);
            _timer = null;
        }
    }

    function doNav()
    {
        if(_pendingAddress)
        {
            window.location = _pendingAddress;
        }
    }
    
    function onUnload()
    {    
        unbind_method(document.body, "click", onClick, false);
        unbind_method(window, "unload", onUnload, false);
    }
}

function ChangeLocalSort(list)
{   
    var currHref= window.location.href;
    var idx = currHref.indexOf('&ls=');
    if(idx != -1)
    {
        var qs = currHref.substr(0, idx);
        idx = currHref.indexOf('&', idx + 5);
        qs += '&ls=' + list.value;
        if (idx != -1 && idx + 1 < currHref.length)
        {
            qs += "&" + currHref.substr(idx + 1);
        }
        currHref = qs;
    }
    else
    {
        currHref = currHref + '&ls=' + list.value;
    }
    window.location = currHref;
}
