var mousex, mousey;
var timeoutID;
var dodebug = true;
var istooltip = false;

//function htmlDecode(str) {return str.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&amp;/g, "&");}
function jsdecode(str) { return str.replace(/&#34;/g, '"').replace(/&#39;/g, "'"); }
function makejsparam(str) { return str.replace(/'/g, "\'").replace(/\n\r/g, "").replace(/\r/g, "").replace(/\n/g, "").replace(/'/g, "\\\'"); }

function showMoreInfoTitle(divid, divinfoid, info, divtitle, title, cssclass) {
    clearTimeout(timeoutID);
    if (document.getElementById(divid) && document.getElementById(divinfoid)) {
        istooltip = false;
        d = document.getElementById(divid);
        d.className = cssclass;
        d.style.display = 'block';
        d.style.zIndex = 20;
        document.getElementById(divinfoid).innerHTML = jsdecode(info);
        document.getElementById(divtitle).innerHTML = jsdecode(title);
        // mydebug(document.getElementById("map").offsetWidth);
        var leftPos = mousex - document.getElementById("map").offsetWidth;
        if (leftPos < 0) leftPos = 0;
        d.style.left = leftPos + 'px';
        d.style.top = (mousey - d.offsetHeight - 1 >= 0 ? mousey - d.offsetHeight - 1 : 0) + 'px';
    }
}

function showTooltip(divid, divinfoid, info, divtitle, title, cssclass) {
    /*  clearTimeout(timeoutID);
    if (document.getElementById(divid) && document.getElementById(divinfoid)) {
    istooltip = true;
    d = document.getElementById(divid);
    d.className = cssclass;
    d.style.display = 'block';
    d.style.zIndex = 20;
    document.getElementById(divinfoid).innerHTML = info;
    document.getElementById(divtitle).innerHTML = title;
    var leftPos = mousex;
    var mouseyt = mousey;
               
    if(leftPos<0)leftPos = 0;
    d.style.left = leftPos + 'px';
    if (mouseyt - d.offsetHeight -1 >= 0) {
    d.style.top = (mouseyt - d.offsetHeight -1) + 'px';
    if (document.getElementById(d.id+"header")) {
    document.getElementById(d.id+"header").style.display = "none";
    }
    if (document.getElementById(d.id+"footer")) {
    document.getElementById(d.id+"footer").style.display = "block";
    }
    } else {
    d.style.top =mouseyt;
    if (document.getElementById(d.id+"footer")) {
    document.getElementById(d.id+"footer").style.display = "none";
    }
    if (document.getElementById(d.id+"header")) {
    document.getElementById(d.id+"header").style.display = "block";
    }
    }
    }*/
}



function hideMoreInfoafter(divid, milisecs) {
    clearTimeout(timeoutID);
    time = 0 + parseInt(milisecs);
    timeoutID = setTimeout("hideMoreInfo('" + divid + "')", time);
}

function closeMoreInfo(divid) {
    d = document.getElementById(divid);
    if (d) {
        d.style.display = 'none';
        d.style.zIndex = -1;
    }
}

function hideMoreInfo(divid) {
    if (istooltip) {
        closeMoreInfo(divid);
    }
}

function mapquery(test) { }

function updateflash(flashid, lang, what, code) {    
    closeMoreInfo('moreinfo' + flashid);
    eval("ShowMap" + flashid + "('" + lang + "','" + what + "','" + code + "')");
}

function decimaltodegree(dcoord) {
    var signlat = 1;
    dcoord = parseFloat(dcoord);
    if (dcoord < 0) { signlat = -1; }
    latAbs = Math.abs(Math.round(dcoord * 1000000.));
    return ((Math.floor(latAbs / 1000000) * signlat) + '&deg; '
     + Math.floor(((latAbs / 1000000) - Math.floor(latAbs / 1000000)) * 60)
     + '\' ' + (Math.floor(((((latAbs / 1000000) - Math.floor(latAbs / 1000000)) * 60) - Math.floor(((latAbs / 1000000) - Math.floor(latAbs / 1000000)) * 60)) * 100000) * 60 / 100000) + '&quot;');
}

function showCoordinates(x, y) {
    return "<table class=\"coordstable\" cellspacing=\"0\" border=0><tr><td width=\"30px\">Long:</td><td width=\"80px\">" + x + "</td><td>Lat:</td><td>" + y + "</td></tr>"
    + "<tr><td></td><td width=\"80px\">" + decimaltodegree(x) + "</td><td></td><td>" + decimaltodegree(y) + "</td></tr></table>";
}

function openGoogleMap(dx, dy) {
    var url = "http://maps.google.com/maps?f=q&hl=en&q=" + dy + "," + dx + "&om=1&z=14&t=k&iwloc=addr";
    var t = window.open(url, "googlemap", "location=no,resizable=yes,menubar=no,directories=no,status=1,scrollbars=1,width=800,height=600");

}

function flashEvent(event, args) {
    alert(event);
    //window.status = "event = "+event +" args="+args;
    if (event == "Map loadxml" && document.getElementById("loading")) {
        document.getElementById("loading").style.display = "block";
    }
    if (event == "Symbol load" && document.getElementById("loading")) {
        document.getElementById("loading").style.display = "none";
    }
    if (event == "Map click") {
        doMapClick(args);
    }
    if (event == "Map mousemove") {
        var coords = args.split(",");
        //window.status = args;
        document.getElementById("coords").innerHTML = showCoordinates(coords[0], coords[1]);
        if (coords[2])
            doMapMouseOver(coords[2]);
    }

    if (event == "Map custom") {
        var coords = args.split(",");
        openGoogleMap(coords[0], coords[1]);
    }
    var mycommands = "";
    if (args && args["_FSCommand"] && args["_FSCommand"].length > 0) {
        mycommands = args["_FSCommand"].split(";;;");
    } else if (args && args.indexOf(event) > -1) {
        mycommands = args.split(";;;");
    }
    var i = 0;
    for (i = 0; i < mycommands.length; i++) {
        var aa = mycommands[i].split("|||");
        if (aa.length > 0 && aa[0].indexOf(event) > -1) {
            var funct = aa[1] + "(";
            for (j = 2; j < aa.length; j++) {
                if (j > 2) funct += ",";
                funct += "'" + makejsparam(aa[j]) + "'";
            }
            funct += ")";
            //mydebug(funct);
            eval(funct);
            break;
        }
    }
}

function doMapClick(argstr) {
    var args = argstr.split("&");
    var hashr = new Array();
    for (var j = 0; j < args.length; j++) {
        var temp = args[j].split("=");
        if (temp.length > 1) {
            hashr[temp[0]] = temp[1];
        }
    }
    if (hashr['featurelayer'].indexOf('Marina') >= 0) {
        marinacode = hashr['featureid'];
        //alert('lang='+langg.substr(0,2));
        MapService.GetMarinaInfo(langg.substr(0, 2), marinacode, showmarinainfo)
    }
}

function doMapMouseOver(argstr) {
    /*window.status ='stopmove '+stopmove; 
    */
}

function showmarinainfo(info) {
    stopmove = true;
    istooltip = false;
    var args = info.split("|||");

    showMoreInfoTitle('moreinfo' + flashid, 'moreinfotext' + flashid, args[1], 'moreinfotitle' + flashid, args[0], 'mypopupdivo');

}


// toolbar functions (calling flash functions)
function flashzoomin(movieName) {
    var flash = flashMovie(movieName);
    flash.DoZoomIn();
}
function flashzoomout(movieName) {
    flashMovie(movieName).DoZoomOut();
}
function flashpan(movieName) {
    var flash = flashMovie(movieName);
    flash.DoPan();
}
function flashcustom(movieName) {
    var flash = flashMovie(movieName);
    var res = flash.DoCustom();
}

function flashlegend(movieName, divid) {
    eval('islegend' + movieName + '=!islegend' + movieName);
    var mli = document.getElementById("legend" + movieName);
    var container = document.getElementById(divid);
    if (mli && container) {
        if (eval('islegend' + movieName)) {
            var flash = flashMovie(movieName);
            var t = flash.ShowLegend();
            t = t.replace(/image\/swf/gi, "image/gif");
            mli.src = t;
            container.style.display = 'block';
            container.style.zIndex = 9000;
            var leftPos = 400;
            if (leftPos < 0) leftPos = 0;
            container.style.left = leftPos + 'px';
            container.style.top = (mousey - container.offsetHeight - 1 >= 0 ? mousey - container.offsetHeight - 1 + 15 : 15) + 'px';
        } else { closeMoreInfo(divid); }
    }

}

function selectlayer(movieName) {
    var flash = flashMovie(movieName);
    var flag = "";
    var cn = eval("document.forms[0].layers" + movieName);
    for (i = 0; i < cn.length; i++) {
        flag = flag + "," + cn[i].checked;
    }
    flag = flag.substr(1);
    flash.DoSetLayers(flag);
}

function flashlayers(movieName, containerdiv, textdiv) {
    eval('layersOn' + movieName + '=!layersOn' + movieName);
    var container = document.getElementById(containerdiv);
    var info = document.getElementById(textdiv);
    if (container) {
        if (eval('layersOn' + movieName)) {
            var flash = flashMovie(movieName);
            var t = flash.GetLayers();
            var html = "";
            var layers = t.split(",");
            for (j = 0; j < layers.length; j++) {
                var tmp = layers[j].split("_");
                html += "<label class=\"layerlabel\"><input type=\"checkbox\" class=\"layercheck\" name=\"layers" + movieName + "\" onclick=\"selectlayer('" + movieName + "', '" + tmp[0] + "', this.checked)\" value=\"1\" " + (tmp[1] == "true" ? "checked" : "") + " >" + tmp[0] + "</label><br/>";
            }
            info.innerHTML = html;
            container.style.display = 'block';
            container.style.zIndex = 2000;
            var leftPos = 500;
            var topPos = 100; //(mousey - container.offsetHeight -1 >= 0 ? mousey - container.offsetHeight -1+15 : 15);
            if (leftPos < 0) leftPos = 0;
            container.style.left = leftPos + 'px';
            container.style.top = topPos + 'px';
        } else { closeMoreInfo(containerdiv); }
    }
}

var ruler = false;
function flashruler(movieName) {
    ruler = !ruler;
    var flash = flashMovie(movieName);
    var t = flash.DoDistance();

}
function pageredirect(url) {
    //mydebug("pageredirect"+url);
    //debugger;
    if (url.length > 0) window.location = url;
}

function refreshpage() {
    window.location.reload(true);
}
// use this to access the flash movie so you can call it's external functions
function flashMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
    } else {
        return document[movieName];
    }
}

// DRAG & DROP
var ie = document.all;
var nn6 = document.getElementById && !document.all;
var isdrag = false;
var x, y;
var dobj;

function movemouse(e) {
    mousex = nn6 ? e.clientX : event.clientX;
    mousey = nn6 ? e.clientY : event.clientY;
    //mydebug("isdrag+"+isdrag+" left="+dobj.style.left+"->"+mousex+" top="+dobj.style.top+"->"+mousey)
    if (isdrag) {
        dobj.style.left = (tx + mousex - x) + "px";
        dobj.style.top = (ty + mousey - y) + "px";
        if (document.getElementById(dobj.id + "footer")) {
            document.getElementById(dobj.id + "footer").style.display = "none";
        }
        if (document.getElementById(dobj.id + "header")) {
            document.getElementById(dobj.id + "header").style.display = "none";
        }
        //mydebug(" left="+dobj.style.left+"-> tx="+tx+" mousex="+mousex+" x="+x+"="+(tx + mousex - x)+" top="+dobj.style.top+"->ty="+ty+" mousey="+mousey+" y="+y+" ="+(ty + mousey - y));
        return false;
    }
}

function selectmouse(e) {
    var fobj = nn6 ? e.target : event.srcElement;
    var topelement = nn6 ? "HTML" : "BODY";

    while (fobj && fobj.tagName != topelement && fobj.className != "mypopupdiv" && fobj.className != "mypopupdivo" && fobj.className != "layersdiv") {
        fobj = nn6 ? fobj.parentNode : fobj.parentElement;
    }

    if (fobj && (fobj.className == "mypopupdiv" || fobj.className == "mypopupdivo" || fobj.className == "layersdiv")) {
        // mydebug("drag");
        isdrag = true;
        dobj = fobj;
        tx = parseInt(dobj.style.left + 0);
        ty = parseInt(dobj.style.top + 0);
        x = nn6 ? e.clientX : event.clientX;
        y = nn6 ? e.clientY : event.clientY;
        document.onmousemove = movemouse;
        //  mydebug("drag "+fobj+" class "+fobj.className);
        return false;
    } else { }

}
document.onmousemove = movemouse;
document.onmousedown = selectmouse;
document.onmouseup = new Function("isdrag=false");

// cms related functions (sync cms with map)
function updatepage(region, subregion, location, flashid, lang, what, code) {
    //  mydebug('update page '+region+' '+subregion+' '+location+'  flashid='+ flashid+" lang="+lang+" "+what+" "+ code);
    //  mydebug("updatepage!!");
    //debugger;
    try {
        if (what == "region") {
            MapService.GetRegionPageUrl(code, lang, urlprefix, pageredirect)
        } 
        else if (what == "subregion") {
            MapService.GetSubRegionPageUrl(code, lang, urlprefix, pageredirect)
        } 
        else if (what == "location") {
            MapService.GetLocationPageUrl(code, lang, urlprefix, pageredirect)
        } /*else if (what == "operator") {
        MapService.GetOperatorsPageUrl(code, lang,urlprefix, pageredirect)
    }*/
        else if (what == "country") {
            MapService.GetCountryPageUrl(code, lang, urlprefix, pageredirect)
        }
    } catch (err) { mydebug('error: ' + err.description); }

}
function noaction(region, subregion, location, flashid, lang, what, code) {
}

// debug functions
function mydebug(str) {
    if (document.getElementById('debug') && dodebug) {
        document.getElementById('debug').innerHTML = str;
    }
}

function debugobject(source) {
    var property, propCollection = "";
    for (property in source) { propCollection += (property + ": " + source[property] + "<br/>"); }
    mydebug(propCollection);
}

// draw map
function drawMap(mapid) {
    try {
        // insert movie using swfobject
        var map = $get("Map" + mapid).value;
        var mapindex = $get("MapIndexPosition" + mapid).value;
        var layers = $get("Layers" + mapid).value;
        var mapindexlayers = $get("MapIndexLayers" + mapid).value;
        var mapindexxmllayers = $get("MapIndexXmlLayers" + mapid).value;
        var MaxZoomOut = $get("MaxZoomOut" + mapid).value;
        var MinZoomOut = $get("MinZoomOut" + mapid).value;
        var CustomButton = $get("CustomButton" + mapid).value;
        var swfobj = fpath + "MapServerFlash/MapSymbols.swf?WMS=" + map + "&Dynamic=" + $get("Dynamic" + mapid).value;
        swfobj += "&Server=" + $get("MapServerUrl" + mapid).value + "&GML=" + $get("XmlLayers" + mapid).value;
        swfobj += "&Query=" + $get("Query" + mapid).value + "&BBox=" + $get("BBox" + mapid).value;
        swfobj += "&BGColor=" + $get("BGColor" + mapid).value;
        if (mapindex && mapindex.length > 0) { swfobj += "&MapIndex=" + mapindex; }
        if (layers && layers.length > 0) { swfobj += "&Layers=" + layers; }
        if (mapindexlayers && mapindexlayers.length > 0) { swfobj += "&MapIndexLayers=" + mapindexlayers; }
        if (mapindexxmllayers && mapindexxmllayers.length > 0) { swfobj += "&MapIndexXmlLayers=" + mapindexxmllayers; }
        if (MinZoomOut && MinZoomOut.length > 0) { swfobj += "&MaxZoomIn=" + MinZoomOut; }
        if (MaxZoomOut && MaxZoomOut.length > 0) { swfobj += "&MaxZoomOut=" + MaxZoomOut; }
        if (CustomButton && CustomButton.length > 0) { swfobj += "&CustomButton=" + CustomButton; }
        swfobj += "&MapIndexHeight=" + $get("MapIndexHeight" + mapid).value + "&MapIndexWidth=" + $get("MapIndexWidth" + mapid).value;
        swfobj += "&WrapDateline=" + $get("WrapDateline" + mapid).value + "&Equidistant=" + $get("Equidistant" + mapid).value;
        swfobj += "&Progressive" + $get("Progressive" + mapid).value + "&Feature_Custom=" + $get("Feature_Custom" + mapid).value;
        swfobj += "&MouseAction=" + $get("DefaultMouseAction" + mapid).value + "&TextSize=" + $get("TextSize" + mapid).value + "&TextColor=" + $get("TextColor" + mapid).value + "";
        swfobj += "&ToolBarXY=" + $get("ToolBarXY" + mapid).value + "&ToolBarAlpha=" + $get("ToolBarAlpha" + mapid).value + "";
        var mdiv = document.getElementById('dMapClient' + mapid);
        var w = mdiv.style.width;
        var h = mdiv.style.height;
        var so = new SWFObject(swfobj, "MapClient" + mapid, "100%", "100%", $get("FlashVersion" + mapid).value, $get("FlashBgColor" + mapid).value, true);
        so.addParam("quality", "low");
        so.addParam("Dynamic", "true");
        so.addParam("wmode", "transparent");
        var res = so.write("dMapClient" + mapid);
        //mydebug(res);
        if (!res) {
            document.getElementById("dMapClient" + mapid).innerHTML = "<a target=\"_new\" href=\"http:\/\/www.adobe.com\/shockwave\/download\/download.cgi?P1_Prod_Version=ShockwaveFlash\">Get the Flash Plugin<\/a> to see this.";
        }
        delete so;
        eval('window.MapClient' + mapid + ' = document.forms[0].MapClient' + mapid);
    } catch (err) { window.status = 'error' + err.description; }
}

function resetmap(what, code, mapid) {
    if (what.length <= 0 || code.length <= 0) {
        $get("BBox" + mapid).value = $get("defaultBBox" + mapid).value;
        $get("XmlLayers" + mapid).value = $get("defaultXmlLayers" + mapid).value;
    }
}

function pdisplayMessageCallback(mapid, result) {
    var p = result.split("|||");
    //debugger;
    if (p.length > 1) {
        var flashargs = p[1];
        var commands = flashargs.split("&&&");
        //for (var obj in commands) {
        for(obj = 0 ; obj < commands.length ; obj++){
            var tt = "" + commands[obj]; 
            var aa = tt.split("===");
            if (document.getElementById(aa[0] + mapid) && document.getElementById(aa[0] + mapid).value) {
                document.getElementById(aa[0] + mapid).value = aa[1];

            }
        }
    }
  
    drawMap(mapid);
    if ($get("mapnav" + mapid))
    { if (p[0] != '') $get("mapnav" + mapid).innerHTML = p[0]; }

}

function blockError() { return true; }
window.onerror = blockError;
window.alert = function(s) { }
if (Sys.WebForms != null) Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);
function endRequest(sender, e) {
    if (e.get_error()) {

        // refreshpage();
        e.set_errorHandled(true);
    }
}