﻿dojo.require("hb.hb");
dojo.require("hb.hash");
dojo.require("hb.dijit.MapApp");
dojo.require("dijit.form.Button");
dojo.require("hb.dijit.MapInfoManager");
dojo.require("hb.dijit.Panel");
dojo.require("hb.dijit.Dialog");
dojo.require("hb.dijit.SendMessageDialog");
dojo.require("hb.dijit.DropDownItem");
dojo.require("hb.dijit.MeasureTool");

var widgets = [];
esri.config.defaults.io.proxyUrl = "proxy.ashx?cl=" + hb.client;
initStatHandlers();

function init(){
    if (!app.mapDijit.loaded)
        app.connect(app.mapDijit, "onMapLoad", mapLoad);
    else 
        mapLoad();
    app.connect(app.widgets, "onWidgetCreate", widgetCreate);

    // add language switcher (helps adjust top bar height)
    var dc = dojo.create;
    var node = dc("span", { "class": "hbLang dijitInline" }, app.toolsNode);
    dc("a", { "class": "hbLangLT", innerHTML: "LT", href: "default.aspx?lang=lt" }, node);
    dc("a", { "class": "hbLangEN", innerHTML: "EN", href: "default.aspx?lang=en" }, node);

    app.resize();
    dojo.fadeOut({node:"loading", onEnd:function(){ dojo.style("loading", "display", "none"); }}).play();
}

function mapLoad() {
    strings = dojo.i18n.getLocalization("hb", "mapslt_api");

    if (!hb.systemUpgrade){
        addWidgetShortcuts();
        addTools(strings);
        addMapInfoManager(strings);
        addContextMenuItems(strings);
        addTooManyGraphicsWarning();
        initInfoWindow(strings);
        initLayersDropDown();
        showBanners();
        checkUriFragment();

        if (dojo.isIE && typeof CFInstall !== "undefined") {
            CFInstall.check({ mode:"overlay" });
        }
        if (dojo.isIE == 6)
            warnIE6();

    } // !hb.systemUpgrade

    addExternalLinks(strings);
    addLogos();
    initGA();
    initBannersRefreshHandlers();

    app.resize();
    if (window.performance){
        var now = new Date().getTime();
        var page_load_time = now - window.performance.timing.responseStart;
        console.log("User-perceived page loading time: " + page_load_time);
    }
}

function addLogos(){
    var dc = dojo.create;
    var node = dc("a", {href:"http://www.teo.lt/svetainiu-talpinimas", target:"_blank"}, app.mapDijit.bottomRight);
    dc("img", {src:"images/teo.png", alt:"TEO"}, node);
    dojo.place(dojo.doc.createTextNode(" "), app.mapDijit.bottomRight);
    node = dc("a", {href:"http://www.esri.com", target:"_blank"}, app.mapDijit.bottomRight);
    dc("img", {src:"http://dc1.maps.lt/arcgis_js_api/library/2.0/arcgis/images/map/logo-med.png", alt:"Powered by ESRI&reg;", style:{position:"relative",bottom:"-4px"}}, node);
}

function addWidgetShortcuts(){
    var dc = dojo.create;
    var node = dc("div", {"class":"widgetIcons"}, app.lbPane.domNode);
    widgets.push(new dijit.form.Button({
        iconClass: "widgetIcon befIcon", showLabel: false, title: hb.tr(app.widgets.getWidgetInfo("bef").menuTitle),
        onClick: function(){ app.widgets.selectWidget("bef"); }
    }, dc("button", {}, node)));
    widgets.push(new dijit.form.Button({
        iconClass: "widgetIcon sviesoforaiIcon", showLabel: false, title: hb.tr(app.widgets.getWidgetInfo("sviesoforai").title),
        onClick: function(){ app.widgets.selectWidget("sviesoforai"); }
    }, dc("button", {}, node)));
    widgets.push(new dijit.form.Button({
        iconClass: "widgetIcon influenzaIcon", showLabel: false, title: hb.tr(app.widgets.getWidgetInfo("influenza").title),
        onClick: function(){ app.widgets.selectWidget("influenza"); }
    }, dc("button", {}, node)));
    dc("span", {"class":"dijitInline emptyWidgetButton dijitButtonNode", style:{opacity:0.3}}, node);
    dc("span", {"class":"dijitInline emptyWidgetButton dijitButtonNode", style:{opacity:0.3}}, node);
    dc("span", {"class":"dijitInline emptyWidgetButton dijitButtonNode", style:{opacity:0.3}}, node);
    dc("span", {"class":"dijitInline emptyWidgetButton dijitButtonNode", style:{opacity:0.3}}, node);
}

function addExternalLinks(strings){
    var dc = dojo.create;
    var node = dc("div", {"class":"extLinks"}, app.lbPane.domNode);
    dc("a", {
        innerHTML: strings.mapsWebsite, 
        href: "http://www.maps.lt" + hb.tr({lt:"/lt", en:"/en"}), 
        target: "_blank"
    }, node);
    dojo.place(dojo.doc.createTextNode(" "), node);
    dc("a", {
        innerHTML: strings.help, 
        href: hb.tr({lt:"http://www.maps.lt/lt/pagalba/", en:"http://www.maps.lt/en/help/"}), 
        target: "_blank"
    }, node);
    dojo.place(dojo.doc.createTextNode(" "), node);
    dc("a", {
        innerHTML: strings.createdByHB, 
        href: hb.tr({lt:"http://www.hnit-baltic.lt", en:"http://www.hnit-baltic.lt/DesktopDefault.aspx?tabID=3409&alias=hnit-baltic&lang=en-US"}), 
        target: "_blank"
    }, node);
}

function addTools(strings){
    if (dojo.isIE !== 6) app.addAction(strings.reportBug, "hbProblemIcon", reportProblem);
    app.addAction(strings.print, "hbPrintIcon", function(){
        var routingWidget = app.widgets.getWidget("routing");
        hb.printDirections(app.map, routingWidget? routingWidget.directions : null); });
    if (dojo.isIE !== 6) {
        var node = app.addAction(strings.measure, "hbMeasureIcon", function(){});
        var widget = new hb.dijit.MeasureTool({map:app.map}, node);
        widget.startup();
    }
    if (window.external && typeof (window.external.AddService) != "undefined")
        app.addAction(strings.installAccelerator, "hbAcceleratorIcon", function(){window.external.AddService('maps-lt-accelerator.xml');});
    if (dojo.isIE !== 6) {
        // ArcGis Online
        var node = app.addAction(strings.createMap, "hbArcGisOnlineIcon", function () { });
        var widget = new hb.dijit.DropDownItem({ tooltipContent: "<ul><li><a href=\"\" onclick=\"openArcGISOnline(this);\" target=\"_blank\">" + strings.createMapStart + "</a></li><li><a href=\"http://www.maps.lt/arcgisonline\" target=\"_blank\">" + strings.createMapMore + "</a></li></ul>", extraClasses: "hbArcGisOnlineToolTip" }, node);
        widget.startup();
        // New item
        var node = app.addAction(strings.news, "hbNewIcon", function () { });
        var widget = new hb.dijit.DropDownItem({ tooltipHref: "proxy.ashx?http://www.maps.lt/lt/funkcines_naujienos?newsframe=1", baseClass: "hbNewItem", extraClasses: "yellowTooltip hbNewItemTooltip", cookieName: "hb-new-item" }, node);
        widget.connect(widget.dropDown, "onLoad", function () {
            var newsId = dojo.query(".newsId", this.dropDown.domNode)[0].innerHTML;
            if (newsId && dojo.cookie(this.cookieName) != newsId) {
                this.openDropDown();
                dojo.cookie(this.cookieName, newsId, { expires: 10000 });
            }
        });  
        widget.startup();
    }
}

function openArcGISOnline(node) {
    var url = "http://www.arcgis.com/home/webmap/viewer.html?webmap=16fda016e63a418b903854a7d2bf3d71&extent=" + app.map.extent.xmin + "," + app.map.extent.ymin + "," + app.map.extent.xmax + "," + app.map.extent.ymax + "," + app.map.extent.spatialReference.wkid;
    dojo.attr(node, "href", url);    
}

function addMapInfoManager(strings){
    var clearNode = app.mapDijit.addAction(strings.clearMap, "hbClearIcon", function(){
        dojo.style(mapInfoMngr.domNode, "top", (dojo.contentBox(clearNode).t+4)+"px");
        mapInfoMngr.toggle();
    });
    var mapInfoMngr = new hb.dijit.Panel({
        title: strings.clearMap, 
        content: "<div dojoType='hb.dijit.MapInfoManager'></div>", 
        "class": "hbMapInfoManagerPane", 
        opened: false
    }, dojo.create("div", {}, clearNode, "after"));
    widgets.push(mapInfoMngr);
}

function addContextMenuItems(strings){
    if (dojo.isIE !== 6) addContextMenu(strings.routingIncludeStop, function(ev){ addToRoute(ev.mapPoint); });
    addContextMenu(strings.getPointLink, function(ev){ getPointLink(ev.mapPoint); });
    addContextMenu(strings.getCoordinates, function(ev){ getCoordinates(ev.mapPoint); });
    addContextMenu(strings.searchHere, function(ev){ searchHere(ev.mapPoint); });
}

function addTooManyGraphicsWarning(){
    if (dojo.isIE && dojo.isIE < 9){
        var gfxWarningPanel = dojo.create("div", {
            "class":"hbWarningBox mapWarning",
            innerHTML: hb.tr({lt:"Lėtai veikia? Pabandykite išjungti nereikalingus objektus iš 'Žemėlapyje rodyti' sąrašo", en:"Too slow? Try hiding unnecessary objects in 'Show on map' list"}) +
                " <span class='mapWarningIcon'><span class='dijitDialogCloseIcon'></span></span>",
            style: {display:"none"}
        }, app.mapDijit.topLeft);
        app.connect(app.queryLayers, "onChange", function(){
            dojo.style(gfxWarningPanel, "display", (app.queryLayers.getShownViewsCount() > 3) ? "" :"none");
        });
        app.connect(dojo.query(".dijitDialogCloseIcon", gfxWarningPanel)[0], "onclick", function(){ dojo.style(gfxWarningPanel, "display", "none"); });
    }
}

function initInfoWindow(strings){
    var iw = hb.infoWindow(app.map);
    if (iw.registerAction){
        iw.registerAction({
            label: strings.routingIncludeStop,
            callback: function(context){ 
                var owner = context.owner;
                if (owner && owner instanceof esri.Graphic)
                    addToRoute(owner.geometry, owner.attributes);
                else
                    addToRoute(context.mapPoint); 
            },
            includeTags: ["point"], excludeTags: ["routing", /^cluster_\d$/, "ad", "sviesoforai_lt"] 
        });
        iw.registerAction({
            label: strings.businessSearchHere,
            callback: function(context){
                var address = context.owner.attributes.address.match(/(.*),[^,]*/)[1];console.log(address);
                callWidget("business", function(w){ w.form.set("value", {q:"",adresas:address}); w.search(); });
            },
            includeTags: ["address"] 
        });
        iw.registerAction({
            label: strings.searchHere,
            callback: function(context){ searchHere(context.mapPoint); },
            includeTags: ["point"], excludeTags: ["routing", /^cluster_\d$/, "ad", "sviesoforai_lt"] 
        });
    }
    if (iw.registerSection){
        iw.registerSection({callback:updateInfoWindowAd});
    }
}

function initLayersDropDown(){
    var node = dojo.create("div", {
        "class": "hbBubble hbWarningBox hbLayersDropDownInfo",
        innerHTML: hb.tr({lt:"Kai kurie duomenys rodomi tik labiau priartinus žemėlapį. Priartinti: ", en:"Some data is not available for this scale. Zoom in at: "}) +
            "<span class='hbActionElement' onclick='app.map.setLevel(hb.level({map:app.map, scale:5000}));'>" + hb.tr({lt:"šioje vietoje", en:"this place"}) +"</span>, " +
            "<span class='hbActionElement' onclick='app.map.centerAndZoom(new esri.geometry.Point(582716, 6061889, app.map.spatialReference), hb.level({map:app.map, scale:5000}));'>" + hb.tr({ lt: "Vilniuje", en: "Vilnius" }) + "</span>, " +
            "<span class='hbActionElement' onclick='app.map.centerAndZoom(new esri.geometry.Point(493643, 6084643, app.map.spatialReference), hb.level({map:app.map, scale:5000}));'>" + hb.tr({ lt: "Kaune", en: "Kaunas" }) + "</span>, " +
            "<span class='hbActionElement' onclick='app.map.centerAndZoom(new esri.geometry.Point(319815, 6178814, app.map.spatialReference), hb.level({map:app.map, scale:5000}));'>" + hb.tr({ lt: "Klaipėdoje", en: "Klaipėda" }) + "</span>"
    }, app.layersSwitcher.dropDown.domNode, "first");
    app.connect(app.map, "onZoomEnd", updateLayersDropDown);
    updateLayersDropDown();
}

function widgetCreate(id, widget){
    if (id === "routing"){
        // Add option to get link to route
        var node = dojo.create("div", {"class":"hbActionElement", innerHTML:strings.getRouteLink}, widget.results.resultsNode);
        widget.connect(node, "onclick", function(){ getRouteLink(widget); });
    }
}


// Dialogs ---

var problemDlg;
function reportProblem(){
    if (!problemDlg){
        problemDlg = new hb.dijit.SendMessageDialog({
            title:strings.reportBug,
            url: hb.servicesUrl + 'comment.ashx?cl=' + hb.client,
            map: app.map
        });
        problemDlg.startup();
        widgets.push(problemDlg);
    }
    problemDlg.show();
}

var ie6WarningDlg;
function warnIE6(){
    if (!ie6WarningDlg){
        var dlg = ie6WarningDlg = new hb.dijit.Dialog({ 
            title: strings.warning, 
            content:strings.ie6Warning 
        });
        dlg.startup();
        dlg.set("buttons", hb.dijit.Dialog.OK);
        dojo.addClass(dlg.domNode, "hbWarningDialog");
        widgets.push(dlg);
    }
    ie6WarningDlg.show();
}

var linkDlg;
function getLink(params){
    var map = app.map;
    var center = hb.center(map.extent);
    var dlg = linkDlg;
    if (!dlg){
         dlg = new hb.dijit.Dialog({ title: strings.linkTitle });
         dlg.startup();
         linkDlg = dlg;
    }
    
    var endPos = location.href.indexOf("#");
    var url = endPos > 0 ? location.href.substr(0, endPos) : location.href;
    if (url.indexOf("lang=") == -1)
        url += (url.indexOf("?") == -1 ? "?" : "&amp;") + "lang=" + dojo.locale;
    url = url + "#" + params + "&xy=" + Math.round(center.x, 0) + "," + Math.round(center.y, 0) + 
        "&z=" + hb.scale(map) + "&lrs=" + app.layersSwitcher.getActiveLayers().join(",");
    dlg.set("content", "<textarea cols='50' rows='6'>"+url+"</textarea>");
    dlg.show();
}

var coordsDlg;
function getCoordinates(lks){
    hb.project(lks, new esri.SpatialReference({ wkid: 4326 }),
        function(wgs){
            var dlg = coordsDlg;
            if (!dlg){
                var dlg = new hb.dijit.Dialog({ title: strings.coordinates });
                dlg.startup();
                coordsDlg = dlg;
            }
            
            var content = [hb.formatPt(lks, {addSR:true}), hb.formatPt(wgs, {addSR:true}), hb.formatPt(wgs, {addSR:true, format:"deg"})].join("<br />");
            dlg.set("content", content);
            dlg.show();
        }
    );
}

var msgDlg;
function showMsg(msg){
    var dlg = msgDlg;
    if (!dlg){
         dlg = new hb.dijit.Dialog({buttons:hb.dijit.Dialog.OK});
         dlg.startup();
         msgDlg = dlg;
    }
    dlg.setContent(msg);
    dlg.show();
}


// Widgets ---

// support for safely calling function on widgets as 
// the widgets might need to be loaded first
function callWidget(widgetId, funct){
    var widget = app.widgets.getWidget(widgetId);
    if (widget){
        funct(widget);
    } else {
        var connect = dojo.connect(app.widgets, "onWidgetShow", function(id, widget){
            if (id === widgetId)
                funct(widget);
            dojo.disconnect(connect);
        });
    }
    app.selectWidget(widgetId);
}


// Context menu ---

function addContextMenu(label, callback){
    var item = new dijit.MenuItem({ label:label });
    dojo.publish("hb.dijit.MapContextMenu.addItem", [app.map, item]);
    app.connect(item, "onClick", function(){
        var event = item.getParent().lastEvent;
        if (event)
            callback(event);
    });
    return item;
}

function addToRoute(mapPoint, attrs){
    callWidget("routing", function(widget){ 
        var success = widget.routing.addLocation(mapPoint, attrs); 
        if (!success)
            showMsg(strings.routingAddStopFail);
    });
}

function searchHere(mapPoint){
    callWidget("localSearch", function(widget){
        widget.selectPoint(mapPoint);
    });
}


function updateLayersDropDown() {
    var scale = hb.scale(app.map);
    dojo.query(".hbLayersDropDownInfo", app.layersSwitcher.dropDown.domNode).style("display", scale > 6000 ? "" : "none");
}


// Links ---

var linkGraphics;
function checkUriFragment(){
    try {
        var map = app.map;
        var layers = app.mapDijit.layers;
        
        // Support for MapInfoManager
        linkGraphics = {
            id: "link",
            title: strings.linkTitle,
            gfx: new hb.GraphicsManager(map),
            clear: function(){ linkGraphics.gfx.clear(); }
        }
        app.connect(linkGraphics.gfx, "onClear", function(){ dojo.publish("hb.mapInfoCleared",[linkGraphics]); });
        app.connect(linkGraphics.gfx, "onShow", function(){ dojo.publish("hb.mapInfoShown",[linkGraphics]); });
        
        var query = hb.hash.get("q");
        if (query){
            callWidget("geocoding", function(widget){ widget.search(query); });
        }

        var dirs = hb.hash.get("d");
        if (dirs){
            callWidget("routing", function(w){ 
                w.routing.loadLocations(dirs, hb.hash.get("d_prsrv")); 
                var imp = hb.hash.get("d_imp");
                if (imp)
                    w.routing.set("impedanceAttribute", imp);
                
                var autoZoom = w.routing.get("autoZoom");
                w.routing.set("autoZoom", false);
                var c = dojo.connect(w.routing, "onSolveStart", function(){
                    dojo.disconnect(c);
                    w.routing.set("autoZoom", autoZoom);
                });
                if (!hb.hash.get("d_ns"))
                    setTimeout(function(){ w.routing.initiateSolve(); }); 
            });
        }
        
        var type = hb.hash.get("t");
        if (type && hb.layerDefs[type] && hb.layerDefs[type].group === "bg")
            layers.show(type);

        var layers = hb.hash.get("lrs");
        if (layers)
            app.layersSwitcher.setActiveLayers(layers.split(","));
            
        var center = hb.hash.get("xy");
        if (center){
            var coords = center.split(",");
            if (coords.length === 2){
                var scale = hb.hash.get("z");
                if (scale)
                    var level = hb.level({map:map, scale:scale});
                else
                    var level = map.getLevel();
                var pt = new esri.geometry.Point(parseFloat(coords[0]), parseFloat(coords[1]))
                map.centerAndZoom(pt, level);
            }
        }
        
        var obj = hb.hash.get("obj");
        if (obj){
            var parts = obj.split("|");
            if (parts.length === 1) parts = obj.split(";");
            if (parts.length === 4){
                var object = {
                    geometry: {type:"point", coords:[parseFloat(parts[0]), parseFloat(parts[1])]},
                    title: parts[2],
                    info: parts[3]
                };
                linkGraphics.gfx.showObject(object);
            }
        }

        var biz = hb.hash.get("biz");
        if (biz)
            callWidget("business", function(){});

        var sv = hb.hash.get("bef");
        if (sv)
            callWidget("bef", function(){});

        var sv = hb.hash.get("sv");
        if (sv)
            callWidget("sviesoforai", function(){});

        var flu = hb.hash.get("flu");
        if (flu)
            callWidget("influenza", function(){});
        
        //hb.hash.set({}, true);
        
        if (dojo.isIE) document.title = "maps.lt";
    //} catch(e) {hb.err(e);}
    } catch(e) {console.log(e);}
}

function getPointLink(mapPoint){
    getLink("obj=" + Math.round(mapPoint.x, 0) + ";" + Math.round(mapPoint.y, 0) + ";" + hb.encode(strings.pointTitle) + ";");
}

function getRouteLink(routingWidget){
    getLink("d=" + routingWidget.routing.getLocations()+"&d_imp="+routingWidget.routing.impedanceAttribute);
}


// Statistics

function initStatHandlers(){
    var count = 0;
    var stats = [];
    var track = function(a){ stats.push(a); };
    function updateTracker(){
        if (typeof _gaq != "undefined"){
            //_gaq.push(['_setAccount', djConfig.urchin]);
            track = function(a){ a=(["_trackEvent"]).concat(a); _gaq.push(a); };
            dojo.forEach(stats, track);
        } else {
            if (count < 120){
                setTimeout(updateTracker, 500);
                count++;
            } else {
                track = function(){}
            }
        }
        //track = console.log;
    }
    function getTrackFn(){ 
        var args = [];
        for (var i=0; i<arguments.length; i++) args.push(arguments[i]); 
        return function(){try{  track(args);  }catch(e){hb.err(e);}};
    }
    updateTracker();
    var ds = dojo.subscribe;
    ds("hb.widgets.Business.search", function(q){ try{ if (!q.Nuo) track(["Įmonės", "Paieška"]); }catch(e){hb.err(e);} });
    ds("hb.widgets.Business.moreClick", getTrackFn("Įmonės", "Paspausta 'Plačiau www.info.lt'"));
    ds("hb.Layers.onShow", function(map,id,def){ try{ track(["Žemėlapio sluoksniai", settings.layerViews[id].title.lt]); }catch(e){hb.err(e);} });
    ds("hb.dijit.Routing.solve", function(q){ try{ track(["Maršrutai", "Paieška", q.stops.features.length + " tšk."]); }catch(e){hb.err(e);} });
    ds("hb.widgets.Routing.pubTransportSearch", getTrackFn("Maršrutai", "Maršruto paieška viešuoju transportu"));
    ds("hb.dijit.InfoWindow.show", function(c){ try{
        var evName = "Informacijos langelio atidarymas";
        if (dojo.indexOf(c.tags, "business")!==-1) track(["Įmonės", evName, businessClassName(c.owner.attributes.classID)]); 
        if (c.owner.graphics){ // cluster
            dojo.forEach(c.owner.graphics, function(g){
                if (dojo.indexOf(g.tags, "business")!==-1) track(["Įmonės", evName, businessClassName(g.attributes.classID)]); 
            });
        }
        if (dojo.indexOf(c.tags, "ad")!==-1 && dojo.indexOf(c.tags, "loading")===-1) track(["Reklama", evName, c.owner&&c.owner.attributes&&c.owner.attributes.groupName]); 
    }catch(e){hb.err(e);} });
    ds("hb.dijit.WidgetsContainer.onWidgetCreate", function(id,w){ try{ track([app.widgets.getWidgetInfo(id).title.lt, "Užkrovimas"]); }catch(e){hb.err(e, id);} });
    ds("hb.dijit.Map.onAction", function(map,node,title){ try{ track(["Žemėlapis", "'"+title+"' funkcija"]); }catch(e){hb.err(e);} });
    ds("hb.dijit.Locator.search", getTrackFn("Vietos paieška", "Paieška"));
    ds("hb.dijit.MeasureTool.onShow", getTrackFn("Matavimo įrankiai", "Parodymas"));
    ds("hb.widgets.SviesoforaiLT.linkToAllCameras", getTrackFn("Vilniaus vairuotojų informavimo sistema", "Paspausta 'Visos kameros'"));
    ds("hb.widgets.SviesoforaiLT.linkToSviesoforaiLT", getTrackFn("Vilniaus vairuotojų informavimo sistema", "Paspausta 'www.sviesoforai.lt'"));
}

function businessClassName(id){
    var views = settings.onMapLoad.queryLayers.views;
    for (var i in views){
        var where = views[i].layers[0].where;
        if (where && where.match(new RegExp("^classID in \\("+id+"|("+id+",.*)|(.*,"+id+",.*)|(.*,"+id+")\\)$"))){
            return settings.layerViews[i].title.lt;
        }
    }
}


// Adds

var currAdPt;
var adLoading;
function updateInfoWindowAd(node, context){

    var baseClass = "hbInfoWindowAd";
    var contentClass = baseClass+"Content";
    if (!dojo.hasClass(node, baseClass)){
        dojo.place(node, dojo.query(".hbInfoWindowBody", hb.infoWindow(app.map).domNode)[0], "last");
        dojo.addClass(node, baseClass);
        dojo.create("div", {'class':contentClass, innerHTML:"<iframe src='blank.html' width='320' height='25' frameborder='0' border='0' marginwidth='0' marginheight='0' scrolling='no'></iframe>"}, node);
        adLoading = new hb.dijit.Message({}, dojo.create("div", {}, node));
    }

    var ad = dojo.query("."+contentClass+" iframe")[0];
    if (ad) // ad blocker can block this item
        dojo.style(ad, "display", "none");
    
    var tags = context.tags;
    if (tags && dojo.indexOf(tags,"point")!==-1 && dojo.indexOf(tags,"address")!==-1){
        var pt = context.mapPoint;
        currAdPt = pt;
        adLoading.show({message:strings.loading, type:"loading"});
        dojo.io.script.get({
            url: hb.servicesAoUrl + "client_data.ashx",
            callbackParamName: "callback",
            content: { cl: hb.client, geometry: pt.x + "," + pt.y },
            handleAs: "json",
            load: function(results){
                if (currAdPt.x === pt.x && currAdPt.y === pt.y){
                    dojo.forEach(results, function(r){
                        if (r.name == "mezon" && (r.value === 1 || r.value === 2)){
                            var uri = 'http://anet.tradedoubler.com/anet?type(iframe)loc(91789)' + new String (Math.random()).substring (2, 11);
                            if (ad){ // ad blocker can block this item
                                dojo.attr(ad, "src", uri);
                                dojo.style(ad, "display", "");
                            }
                        }
                        if (r.name == "ogmios_m" && r.value === 1){
                            dojo.create("img", {src:"http://www.maps.lt/map/images/_ads/opm.png", style:{display:"block"}}, dojo.query(".hbInfoWindowContent", hb.infoWindow(app.map).domNode)[0], "last");
                        }
                    });
                    adLoading.clear();
                }
            }
        }); 
    }
}

function initBannersRefreshHandlers(){
    dojo.subscribe("hb.dijit.Locator.search", updateTopBanners);
    dojo.subscribe("hb.dijit.Routing.solve", updateTopBanners);
    dojo.connect(app.widgets, "onWidgetShow", updateTopBanners);
}

function showBanners(){
    updateTopBanners();
    updateBottomBanner();
}

function updateTopBanners(){
    try {
		console.log("updateTopBanners", arguments);
		if (typeof(topBanner) !== "undefined" && topBanner.hbShowAds){
			topBanner.hbShowAds();
		} else {
			setTimeout(updateTopBanners, 1000);
		}
    } catch(e){ hb.err(e, document.domain); }
}

function updateBottomBanner(){
    try {
		console.log("updateBottomBanner", arguments, dojo.global._bottomBannerLoaded);
        if (dojo.global._bottomBannerLoaded && typeof(bottomBanner) !== "undefined" && 
            bottomBanner.document && bottomBanner.document.getElementsByTagName("img").length){
		    dojo.style("bottomBanner", {position:"relative", visibility:"visible"});
		    var layout = dijit.byId("layout");
            if (layout)
                layout.layout();
	    }   
    } catch(e){ hb.err(e);}
}



function initGA(){
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
}



dojo.addOnLoad(init);


