var mousex, mousey;
var timeoutID;
var dodebug = true;
var istooltip = false;
var stopmove = 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';*/
                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 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 hideMoreInfoafter2(divid, milisecs) {
         istooltip = true;
         clearTimeout(timeoutID);
         time = 0 + parseInt(milisecs);
         timeoutID = setTimeout("closeMoreInfo('"+divid+"')", time);
}

function hideMoreInfoafter(divid, milisecs) {
         clearTimeout(timeoutID);
      
          stopmove = false;
         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) {
    window.status = "test = "+test;
}

function updateflash(flashid, lang, what, code) {
  hideMoreInfoafter('moreinfo'+flashid, 1500);
    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) {
  //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(divid, divinfoid, info, divtitle, title, cssclass)
    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 = mousex;
    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 = mousex;
    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(containerdiv);}
   }
}

var ruler = false;
function flashruler(movieName){
   ruler = !ruler;
   var flash = flashMovie(movieName);
   var t = flash.DoDistance();
  
}
function pageredirect(url) {
//mydebug("pageredirect"+url);
    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";
    }
    //my3(" 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!!");
    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);}    

 }


 // 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("|||");
            if (p.length > 1) {
                flashargs = p[1];
                commands = flashargs.split("&&&");
                for(var obj in commands){
                    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() ){
           e.set_errorHandled( true );
           //refreshpage();
    }
}