// variables that can be modified before call to initPage() which is normally called from window.onLoad

var myFavoriteFrame; 
var myParentFrameset;
var myBuddyFrames;
// used by docs who wants to live in subframescontaining frames, iframes and layers:
// myFavoriteFrame = new Array('PreferredFrame, 'ThisFrameAlsoOK', 'AndThis'); 
// myParentFrameset = 'http://sdsf/MyparentFrameSet?Open';
// myBuddyFrames = new Array(); myBuddyFrames.leftframe = 'http://sdsf/contentFroFramenamedleftframe'; ...


var frameSources; 
// used by docs containing frames, iframes and layers:
// frameSources = new Array(); 
// frameSources.frameName1 = 'http://...';
// frameSources.frameName2 = 'http://...';

// set to true if document wants to live in top frame.
var wantsToBeInTopFrame = false; 

function ensureTopFrame()
{
   // code for pages & framesets that wants to live in top frames
   // alert('Ensuring that we are loaded in top frame');
   if (top.document != document)
   {
      // alert(document.href + ' wants to be in top window reloading');
	  // Reload ourselves in a new window
      document.open('text/html');
	  var msg = (document.frameMessage) ? document.frameMessage : "Dokumentet er åbnet i et nyt vindue";
      document.writeln('<H2>' + msg + '</H2>');
      document.close();
      var win = window.open(window.location.href, '_blank');   
      win.focus();
      return false;
   };
   return true;
}

function isOpenedInCorrectFrame(myFavoriteFrame)
{
  
  // code for pages & framesets that wants to be loaded inside specific framesets
  if (myFavoriteFrame.length == 0) return true; //none specified -any frame is OK
  if (myFavoriteFrame[0] == '') return true; //none specified -any frame is OK
  
  for(var i = 0; i < myFavoriteFrame.length; i++) {
    if (window.name == myFavoriteFrame[i])  {
      return true; // we are where we want to be
    }  
  }
 
  return false;
}

function ensureOpenedInFrame()
{
  // code for pages & framesets that wants to be loaded inside specific framesets   
  if (isOpenedInCorrectFrame(myFavoriteFrame)) return true;
  // alert('Reloading to live in frame/layer ' + myFavoriteFrame[0] + ' of ' + myParentFrameset);

  // first see if we can find a frame with the correct name on the path to the top window - if so, just reload ourselves there.
  for(var win = window; win.name != win.parent.name; win = win.parent)
  {
     if (win.name == myFavoriteFrame[0]) // let's go there
     {
	    // alert(location.href+": loaded in frame " + window.frames.name + "\n - reloading in parent frame " + win.name); 
	    win.location.replace(location.href);
		return false;
     }
  }
	
  newURL = myParentFrameset + ( (myParentFrameset.indexOf('?') == -1) ?  '?' : '&') + 
           myFavoriteFrame[0] + '=' + escape(window.location.toString());
  
  if (typeof(myBuddyFrames) != "undefined") {
     for(var buddy in myBuddyFrames) {
        newURL += ( "&" + buddy + "=" + escape(myBuddyFrames[buddy]));
     }
  }      
  // alert(location.href+": loaded in frame " + window.frames.name + "\n - redirecting to parent frameset " + newURL);
  location.replace(newURL);
  return false;
}

function setupSubFrames() {
  // Code for framesets & pages with iframes and sublayers
  // set up subframes
  if (typeof(frameSources) == "undefined") {       
    frameSources = new Array();
  };

  // build an array of parameters that could be frame names
  var paramArray = window.location.search.split("&");

  for(var i=0;i<paramArray.length;i++) {
    if (/(\w+)=([^\?&]+)/.test(paramArray[i])) {
      frameSources[RegExp.$1] = unescape(RegExp.$2); 
    }
  }

  // loop through all the parameter to find frames & layers which needs to be modified
  //  if (document.layers) { alert('setupSubFrames: ' + getAllLayers(document)); }
  for(var fname in frameSources) {
    var f_src = frameSources[fname];  
    if (f_src != '') {
      // check for frame with this name
      if (typeof(window.frames[fname]) != "undefined") {
        var f = window.frames[fname];
        if (f.location != f_src){  // it wasn't what it was supposed to be - reload it.
           // alert('Updating frame ' + fname + ' from ' + f.location + ' to ' + f_src);
           f.location.replace(f_src);
        };
      } 
    } 
  }
}

function replaceFrameOrLayer(win, target, url)
{
   // alert('replaceFrameOrLayer(' +win.location + ','+ target+','+ url+')'); 
   for(var i = 0; i < win.frames.length;i++ )
   {
      var fr = win.frames[i];
	  if (fr.name == target)
      {
        // alert('found frame');
	     fr.location.replace(url);
		 return true;
      }
      if (replaceFrameOrLayer(fr, target,url))
      {
	     return true;
      }
   }
   return false;
}

// Ultimate client-side JavaScript client sniff. 
// (C) Netscape Communications 1999. Permission granted to reuse and distribute. 
// Revised 17 May 99 to add is.nav5up and is.ie5up (see below). 
// 
// See http://www.it97.de/JavaScript/JS_tutorial/bstat/navobj.html and 
// http://www.it97.de/JavaScript/JS_tutorial/bstat/Browseraol.html 
// for detailed lists of userAgent strings. 
// 
// Note: you don't want your Nav4 or IE4 code to "turn off" or 
// stop working when Nav5 and IE5 (or later) are released, so 
// in conditional code forks, use is.nav4up ("Nav4 or greater") 
// and is.ie4up ("IE4 or greater") instead of is.nav4 or is.ie4 
// to check version in code which you want to work on future 
// versions. 
function Is () 
{ // convert all characters to lowercase to simplify testing 
var agt=navigator.userAgent.toLowerCase(); 
// *** BROWSER VERSION *** 
// Note: On IE5, these return 4, so use is.ie5up to detect IE5. 
this.major = parseInt(navigator.appVersion); 
this.minor = parseFloat(navigator.appVersion); 
this.nav = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) 
&& (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) 
&& (agt.indexOf('webtv')==-1)); 
this.nav2 = (this.nav && (this.major == 2)); 
this.nav3 = (this.nav && (this.major == 3)); 
this.nav4 = (this.nav && (this.major == 4)); 
this.nav4up = (this.nav && (this.major >= 4)); 
this.navonly = (this.nav && ((agt.indexOf(";nav") != -1) || 
(agt.indexOf("; nav") != -1)) ); 
this.nav5 = (this.nav && (this.major == 5)); 
this.nav5up = (this.nav && (this.major >= 5)); 
this.ie = (agt.indexOf("msie") != -1); 
this.ie3 = (this.ie && (this.major < 4)); 
this.ie4 = (this.ie && (this.major == 4) && (agt.indexOf("msie 5.0")==-1) ); 
this.ie4up = (this.ie && (this.major >= 4)); 
this.ie5 = (this.ie && (this.major == 4) && (agt.indexOf("msie 5.0")!=-1) ); 
this.ie5up = (this.ie && !this.ie3 && !this.ie4); 
// KNOWN BUG: On AOL4, returns false if IE3 is embedded browser 
// or if this is the first browser window opened. Thus the 
// properties is.aol, is.aol3, and is.aol4 aren't 100% reliable. 
this.aol = (agt.indexOf("aol") != -1); 
this.aol3 = (this.aol && this.ie3); 
this.aol4 = (this.aol && this.ie4); 
this.opera = (agt.indexOf("opera") != -1); 
this.webtv = (agt.indexOf("webtv") != -1); 
// *** JAVASCRIPT VERSION CHECK *** 
if (this.nav2 || this.ie3) this.js = 1.0 
else if (this.nav3 || this.opera) this.js = 1.1 
else if ((this.nav4 && (this.minor <= 4.05)) || this.ie4) this.js = 1.2 
else if ((this.nav4 && (this.minor > 4.05)) || this.ie5) this.js = 1.3 
else if (this.nav5) this.js = 1.4 
// NOTE: In the future, update this code when newer versions of JS 
// are released. For now, we try to provide some upward compatibility 
// so that future versions of Nav and IE will show they are at 
// *least* JS 1.x capable. Always check for JS version compatibility 
// with > or >=. 
else if (this.nav && (this.major > 5)) this.js = 1.4 
else if (this.ie && (this.major > 5)) this.js = 1.3 
// HACK: no idea for other browsers; always check for JS version with > or >= 
else this.js = 0.0; 
// *** PLATFORM *** 
this.win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) ); 
// NOTE: On Opera 3.0, the userAgent string includes "Windows 95/NT4" on all 
// Win32, so you can't distinguish between Win95 and WinNT. 
this.win95 = ((agt.indexOf("win95")!=-1) || (agt.indexOf("windows 95")!=-1)); 
// is this a 16 bit compiled version? 
this.win16 = ((agt.indexOf("win16")!=-1) || 
(agt.indexOf("16bit")!=-1) || (agt.indexOf("windows 3.1")!=-1) || 
(agt.indexOf("windows 16-bit")!=-1) ); 
this.win31 = ((agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("win16")!=-1) || 
(agt.indexOf("windows 16-bit")!=-1)); 
// NOTE: Reliable detection of Win98 may not be possible. It appears that: 
// - On Nav 4.x and before you'll get plain "Windows" in userAgent. 
// - On Mercury client, the 32-bit version will return "Win98", but 
// the 16-bit version running on Win98 will still return "Win95". 
this.win98 = ((agt.indexOf("win98")!=-1) || (agt.indexOf("windows 98")!=-1)); 
this.winnt = ((agt.indexOf("winnt")!=-1) || (agt.indexOf("windows nt")!=-1)); 
this.win32 = ( this.win95 || this.winnt || this.win98 || 
((this.major >= 4) && (navigator.platform == "Win32")) || 
(agt.indexOf("win32")!=-1) || (agt.indexOf("32bit")!=-1) ); 
this.os2 = ((agt.indexOf("os/2")!=-1) || 
(navigator.appVersion.indexOf("OS/2")!=-1) || 
(agt.indexOf("ibm-webexplorer")!=-1)); 
this.mac = (agt.indexOf("mac")!=-1); 
this.mac68k = (this.mac && ((agt.indexOf("68k")!=-1) || 
(agt.indexOf("68000")!=-1))); 
this.macppc = (this.mac && ((agt.indexOf("ppc")!=-1) || 
(agt.indexOf("powerpc")!=-1))); 
this.sun = (agt.indexOf("sunos")!=-1); 
this.sun4 = (agt.indexOf("sunos 4")!=-1); 
this.sun5 = (agt.indexOf("sunos 5")!=-1); 
this.suni86= (this.sun && (agt.indexOf("i86")!=-1)); 
this.irix = (agt.indexOf("irix") !=-1); // SGI 
this.irix5 = (agt.indexOf("irix 5") !=-1); 
this.irix6 = ((agt.indexOf("irix 6") !=-1) || (agt.indexOf("irix6") !=-1)); 
this.hpux = (agt.indexOf("hp-ux")!=-1); 
this.hpux9 = (this.hpux && (agt.indexOf("09.")!=-1)); 
this.hpux10= (this.hpux && (agt.indexOf("10.")!=-1)); 
this.aix = (agt.indexOf("aix") !=-1); // IBM 
this.aix1 = (agt.indexOf("aix 1") !=-1); 
this.aix2 = (agt.indexOf("aix 2") !=-1); 
this.aix3 = (agt.indexOf("aix 3") !=-1); 
this.aix4 = (agt.indexOf("aix 4") !=-1); 
this.linux = (agt.indexOf("inux")!=-1); 
this.sco = (agt.indexOf("sco")!=-1) || (agt.indexOf("unix_sv")!=-1); 
this.unixware = (agt.indexOf("unix_system_v")!=-1); 
this.mpras = (agt.indexOf("ncr")!=-1); 
this.reliant = (agt.indexOf("reliantunix")!=-1); 
this.dec = ((agt.indexOf("dec")!=-1) || (agt.indexOf("osf1")!=-1) || 
(agt.indexOf("dec_alpha")!=-1) || (agt.indexOf("alphaserver")!=-1) || 
(agt.indexOf("ultrix")!=-1) || (agt.indexOf("alphastation")!=-1)); 
this.sinix = (agt.indexOf("sinix")!=-1); 
this.freebsd = (agt.indexOf("freebsd")!=-1); 
this.bsd = (agt.indexOf("bsd")!=-1); 
this.unix = ((agt.indexOf("x11")!=-1) || this.sun || this.irix || this.hpux || 
this.sco ||this.unixware || this.mpras || this.reliant || 
this.dec || this.sinix || this.aix || this.linux || this.bsd || 
this.freebsd); 
this.vms = ((agt.indexOf("vax")!=-1) || (agt.indexOf("openvms")!=-1)); 
} 

if(typeof (window.top.is) == "undefined") {
   var isIE3Mac = false;
 
   // this section is designed specifically for IE3 for the Mac 
   if ((navigator.appVersion.indexOf("Mac")!=-1) && (navigator.userAgent.indexOf("MSIE")!=-1) && (parseInt(navigator.appVersion)==3)) {
     window.top.isIE3Mac = true; 
     window.top.is = 'IE3Mac';
   } else {
      window.top.is = new Is(); 
   }
}

function initPage() // should be called by the onLoad event
{
  // alert('initPage, window.location = ' + window.location +', layers: ' + getAllLayers(document));
  // window.onLoad = undefined;

   // code for pages & framesets that wants to live in top frames
  if ((typeof(document.wantsToBeInTopFrame) != "undefined") && document.wantsToBeInTopFrame) {
     if (!ensureTopFrame()) {
        return;
     }
  } else {
    // code for pages & framesets that wants to be loaded inside specific framesets
    if (typeof(myFavoriteFrame) != "undefined") {
     if (!ensureOpenedInFrame()) {
          return;
     }
    }
  }

  // code for pages & framesets that have subframes or layers
  if ( ((typeof(window.frames) != "undefined") && (window.frames.length > 0)) || 
       ((typeof(document.frames) != "undefined") && (document.frames.length > 0))) {
   setupSubFrames();
  }


} 
