var currentPanoFile="";
var currentRefAngle=0;
var currentPan=0;
var currentTilt=0;
var currentFoV=80;
var housenumberlistboxtxt;

var isMinNS4 = (navigator.appName.indexOf("Netscape") >= 0 &&
                parseFloat(navigator.appVersion) >= 4) ? true : false;
var isMinNS6 = (navigator.appName.indexOf("Netscape") >= 0 &&
                parseFloat(navigator.appVersion) >= 5) ? true : false;
var isMinIE4 = (document.all) ? true : false;
var isMinIE5 = (isMinIE4 && (navigator.appVersion.indexOf("5.") >= 0)) ? true : false;

var hastry=isMinIE5 && (!isMinNS4);

function navigateToFile(file)
{
//  bodyOnUnload();
  location.replace(file);
}

function getVar(name)
{
  var s = document.location.search;
  return getVarFromSearchString(s,name);
}

function getVarFromUrl(url,name)
{
  var comps=url.split("?");
  if(comps.length < 2) return "";
  var s = "?"+comps[1];
  comps=s.split("#");
  s=comps[0];
  return getVarFromSearchString(s,name);
}

function getVarFromSearchString(s,name)
{
  s = "&"+s.substr(1,s.length-1);
  var p=s.indexOf("&"+name+"=");
  if(p >= 0)
  {
    s=s.substr(p+name.length+2,s.length-p-name.length-2);
    var pp=s.indexOf("&");
    if(pp >= 0)
    {
      s=s.substr(0,pp);
    }
    return(urlUnescape(s));
  }
  return "";
}

function urlUnescape(t)
{
  var tt="";
  var i;
  for (i=0; i<=t.length;i++)
  {
    var c=t.charAt(i);
    if(c == "+") c=" ";
    tt=tt+c;
  }
  return(unescape(tt));
}

function fillListBox(listbox,texts,firsttxt)
{
  listbox.options[0]=new Option(firsttxt);
  for(var i=0;i<=texts.length;i++)
  {
    listbox.options[i+1]=new Option(texts[i]);
  }
  for(var i=listbox.options.length;i>texts.length;i--)
  {
    listbox.options[i]=null;
  }
  listbox.selectedIndex=0;
}

function emptyListBox(listbox)
{
  for(var i=listbox.options.length;i>=0;i--)
  {
    listbox.options[i]=null;
  }
  listbox.selectedIndex=0;
}

function htmlEncode(s)
{
  // to do
  return s;
}

function createStreetListbox(streettxt,numbertxt)
{
  var tags="";
  housenumberlistboxtxt=numbertxt;

  tags += "<select name=streets onChange=\"streetChanged(this.selectedIndex,this.form.housenumbers);\"><option selected>"+htmlEncode(streettxt)+"</option>";
  for(var i=0;i<streets.length;i++)
  {
    tags += "<option>"+htmlEncode(streets[i])+"</option>";
  }
  tags += "</select>";

  tags += "<select name=housenumbers onChange=\"housenumberChanged(this.form.streets.selectedIndex,this.selectedIndex);\"><option>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>";
  tags += "</select>";
  return tags;
}

function streetChanged(streetno,housenumberslistbox)
{
  if(streetno > 0)
  {
    fillListBox(housenumberslistbox,housenumbers[streetno-1],housenumberlistboxtxt);
  }
  else
  {
    emptyListBox(housenumberslistbox);
  }
}

function housenumberChanged(streetno,housenumberno)
{
  if(streetno < 1) return;
  if(housenumberno< 1) return;
  var urllist=urls[streetno-1];
  var url=urllist[housenumberno-1];
  if( (window.opener) && (!window.opener.closed) )
  {
    if( (window.opener.bodyLoaded) && (extractFileNameFromLocation(window.opener.location.href) == extractFileNameFromLocation(url)))
    {
      var newpano=getVarFromUrl(url,"pano")
      var newangle=0;
      var hasangle=false;
      if(getVarFromUrl(url,"angle") != "")
      {
        hasangle=true;
        newangle=getVarFromUrl(url,"angle");
      }
      window.opener.openPanoramaFile(newpano,hasangle,newangle);      
    }
    else
    {
//alert(url);
      window.opener.location.replace(url);
    }
  }
  else
  {
    window.opener=null;
    window.opener=window.open(url,"citytour_main");
  }
}

function extractFileNameFromLocation(p)
{
  var comps=p.split("#");
  p=comps[0];
  comps=p.split("?");
  p=comps[0];
  comps=p.split("/");
  if(comps.length < 1) return p;
  var filename;
  if(comps.length > 1)
  {
    filename=comps[comps.length-2]+"/"+comps[comps.length-1];
  }
  else
  {
    filename=comps[comps.length-1];
  }
  return filename;
}

function getScreenWidth()
{
  var w=800;

  if( parseInt ( navigator.appVersion ) >= 4 )
  {
    if(screen)
    {
      if(screen.width)
      {
        w=screen.width;
      }
    }
  }
  return w;
}

function getScreenHeight()
{
  var w=600;

  if( parseInt ( navigator.appVersion ) >= 4 )
  {
    if(screen)
    {
      if(screen.height)
      {
        w=screen.height;
      }
    }
  }
  return w;
}

function openPanoramaFile(filename,setangle,angle)
{
  var i=findPanorama(filename);
  if(i >= 0)
  {
    openPanorama_maxiviewer(i,setangle,angle)
  }
}

function openPanorama_maxiviewer(index,setangle,angle)
{
  if(!setangle) setangle=false;  // un-null;
  angle -= 0;
  var filename=panolist[index];
  var url;  
  if(individualpanohtmls)
  {
    var p=filename.lastIndexOf(".");
    url="../panohtml/"+filename.substr(0,p)+".html?setangle="+(setangle? 1:0)+"&angle="+angle;
  }
  else
  {
    url="../pano/maxiviewer.html?pano="+filename+"&setangle="+(setangle? 1:0)+"&angle="+angle;
  }
  var popupwin = window.open(url,"_blank","fullscreen=0,toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=0,resizable=1,width="+viewerwidth+",height="+viewerheight);
  if(!popupwin)
  {
    alert("Failed to open a new window to show the MaxiView. If your webbrowser has a 'popup blocker', please disable it.");
  }
  else
  {
    var img=createCompass();
    popupwin.compassimg=img;
    popupwin.focus();
  }
}

function tryEval(f)
{
  if(hastry)
  {
    f="try{"+f+"}catch(e){}";
  }
  eval(f);
}

function bodyOnLoad()
{
  bodyLoaded=true;
  if(getVar("pano") != "")
  {
    var newpano=getVar("pano");
    var newangle=0;
    var hasangle=false;
    if(getVar("angle") != "")
    {
      hasangle=true;
      newangle=getVar("angle");
    }
    var cmd="openPanoramaFile(\""+newpano+"\","+hasangle+","+newangle+");";
//    alert(cmd);
    setTimeout(cmd,100);
  }
}

function findPanorama(filename)
{
  for(var i=0;i<panolist.length;i++)
  {
    if(panolist[i] == filename)
    {
      return i;
    }
  }
  return -1;
}

function viewerIsClosed(w)
{
  var img=getViewersCompass(w);
  hideCompass(img);
}

function getViewersCompass(w)
{
  return w.compassimg;
}

// called by the viewer window
function setCompass(filename,angle,w)
{
  var img=getViewersCompass(w);
  try
  {
    if(!bodyLoaded) return;
    if(filename != w.currentCompassFile)
    {
      if(panolist)
      {
        w.currentCompassFile=filename;
        var currentCompassFileIsOnMap=false;
        for(var i=0; i<panolist.length; i++)
        {
          if(panolist[i] == filename)
          {
            currentCompassFileIsOnMap=true;
            if(!img)
            {
              img=createCompass();
              w.compassimg=img;
            }
            moveCompass(img,compassx[i],compassy[i]);
            showCompass(img);
            break;
          }
        }
        if(!currentCompassFileIsOnMap)
        {
          hideCompass(img);
        }
      }
    }
    rotateCompass(img,angle);
  }
  catch(e)
  {
    w.compassimg=null;
  }
}

function showCompass(img)
{
  if(!img) return;
  img.style.visibility="visible";
}

function hideCompass(img)
{
  if(!img) return;
  img.style.visibility="hidden";
}

function moveCompass(img,x,y)
{
  if(!img) return;
  var l=document.getElementById("maplayer");
  x -= 0;
  y -= 0;
  x+=l.offsetLeft;
  y+=l.offsetTop;
  img.style.left=x+"px";
  img.style.top=y+"px";
}

function rotateCompass(img,angle)
{
  if(!img) return;
  while(angle < 0) angle += 360;
  angle=Math.floor((angle+10)/20)*20;
  while(angle >= 360) angle -= 360;
  if(angle == 0) angle="0";
  if(isNaN(angle))
  {
    hideCompass(img);
  }
  else
  {
    var imagefile="../images/compass"+angle+".gif";
    img.src=imagefile;
    if(angle != img.lastangle)
    {
      img.src=imagefile;
      img.lastangle=angle;
    }
    showCompass(img);
  }
}

function createCompass()
{
  var img=document.createElement("IMG");
  img.style.position="absolute";
  img.style.zIndex=100;
  hideCompass(img);
  bodyNode.appendChild(img);
  return img;
}
