///////////////////////////////////////////////////////////////////////////////
//
// Beschrijving: Het Browser object bevat enige browser-afhankelijke
//               functionaliteiten zoals het opzoeken van objecten, het tonen
//               van lagen etc.
//               
///////////////////////////////////////////////////////////////////////////////

//-----------------------------------------------------------------------------
//
// Beschrijving: Constructor voor het Browser object.
//               
// Parameters:   Geen.
//               
// Resultaat:    Geen.
//               
//-----------------------------------------------------------------------------

function Browser()
{
   this.isIE       = false
   this.appVersion = parseInt(navigator.appVersion)

   if (this.appVersion >= 4)
      this.isIE = navigator.appName != "Netscape"

   // Defaults instellen

   this.siteWidth = -1
   this.siteHeight = -1

   // Pointers naar Browser methods leggen.

   this.IsNav         = Browser_IsNav        
   this.IsIE          = Browser_IsIE         
   this.ObjectGet     = Browser_ObjectGet    
   this.MMGet         = Browser_MMGet        
   this.LayerShow     = Browser_LayerShow    
   this.LayerHide     = Browser_LayerHide    
   this.DateCheck     = Browser_DateCheck    
   this.PopupWindow   = Browser_PopupWindow  
   this.DisplayWidth  = Browser_DisplayWidth 
   this.DisplayHeight = Browser_DisplayHeight

   // Constanten voor de PopupWindow functie.

   this.PW_TOOLBAR_NO     = false
   this.PW_TOOLBAR_YES    = true 
   this.PW_MENUBAR_NO     = false
   this.PW_MENUBAR_YES    = true 
   this.PW_STATUSBAR_NO   = false
   this.PW_STATUSBAR_YES  = true 
   this.PW_LOCATION_NO    = false
   this.PW_LOCATION_YES   = true 
   this.PW_RESIZABLE_NO   = false
   this.PW_RESIZABLE_YES  = true 
   this.PW_SCROLLBARS_NO  = false
   this.PW_SCROLLBARS_YES = true 
}  // Browser constructor

// Deze functie retourneert true indien browser geen IE is.
function Browser_IsNav() {return !this.isIE;}

// Deze functie retourneert true indien browser IE is. De browser wordt
// als IE gekenmerkt indien de versie minimaal 4 is en er geen sprake is
// van Netscape (zie de constructor).
function Browser_IsIE()  {return this.isIE;}

// objName = Naam van te vinden image. Indien het object in een laag
//           staat, geef dan op "laag:objectnaam".
//-----------------------------------------------------------------------------
//
// Beschrijving: Functie om browser-onafhankelijk een object in de document
//               hierarchie te vinden.
//               
// Parameters:   in objNaam = Naam van te vinden object. Indien het object in
//                            een laag staat, geef dan op "laag:objectnaam".
//                            Dit laatste is vooral voor Netscape van belang.
//               
// Resultaat:    Het gezochte object of "undefined".
//               
//-----------------------------------------------------------------------------

function Browser_ObjectGet(objName)
{
   var theImage          // Het functieresultaat.
   var divName           // Naam van (optionele) laag.
   var imgName           // Naam van het gezochte object.
   var colonPos          // Positie van : teken in de objName parameter.

   divName = ''
   colonPos = objName.indexOf(':')
   if (colonPos == -1)
      imgName = objName // Er is geen : dus ook geen laag gegeven.
   else
   {
      // Laag is gegeven: we splitsen objName in divName en imgName.
      divName = objName.substring(0, colonPos)
      imgName = objName.substring(colonPos + 1, objName.length)
   }

   if (this.isIE)
      theImage = eval("document.all." + imgName)
   else
      theImage = eval("document." + divName + imgName)

   return theImage
}  // Browser_ObjectGet

//-----------------------------------------------------------------------------
//
// Beschrijving: Deze functie is een verbeterde versie van ObjectGet en moet
//               dan ook het liefst worden gebruikt in nieuwe projecten. Deze
//               functie is 'slim' genoeg om zelf alle lagen in de document
//               hierarchie af te lopen op zoek naar een object. Het is dus
//               niet nodig de laagnaam op te geven.
//               
// Parameters:   in objnam = De naam van het gezochte object.
//               in doc    = Optionele parameter waarmee het te doorzoeken
//                           document kan worden aangegeven. Indien de para-
//                           meter niet wordt gegeven, wordt het huidige 
//                           document aangenomen.
//               
// Resultaat:    Het gezochte element of "undefined".
//               
//-----------------------------------------------------------------------------

function Browser_MMGet(objnam, doc)
{
   var ptr,index,ref
   
   if (!doc) 
      doc = document 
   
   if ((ptr = objnam.indexOf("?")) > 0 && parent.frames.length)
   {
      doc = parent.frames[objnam.substring(ptr+1)].document 
      objnam = objnam.substring(0, ptr)
   }

   if (!(ref = doc[objnam]) && doc.all) 
      ref = doc.all[objnam] 

   for (index = 0; !ref && index < doc.forms.length; index++) 
      ref = doc.forms[index][objnam]

   for (index=0; !ref && doc.layers && index < doc.layers.length; index++) 
      ref = Browser_MMGet(objnam, doc.layers[index].document)

   if (!ref && document.getElementById) 
      ref = document.getElementById(objnam) 
      
   return ref
}  // Browser_MMGet

//-----------------------------------------------------------------------------
//
// Beschrijving: Deze functie toont een <div> tag door de visibility
//               instelling van de style in te stellen op visible.
//               
// Parameters:   layerName = Naam van de te verbergen <div>.
//               
// Resultaat:    Geen.
//               
//-----------------------------------------------------------------------------

function Browser_LayerShow(layerName)
{
   if (this.isIE)
		eval('document.all.' + layerName + '.style.visibility = "visible"')
   else
		eval('document.' + layerName + '.visibility = "visible"')
}  // Browser_LayerShow

//-----------------------------------------------------------------------------
//
// Beschrijving: Deze functie verbergt een <div> tag door de visibility
//               instelling van de style in te stellen op hidden.
//               
// Parameters:   layerName = Naam van de te verbergen <div>.
//               
// Resultaat:    Geen.
//               
//-----------------------------------------------------------------------------

function Browser_LayerHide(layerName)
{
   if (this.isIE)
		eval('document.all.' + layerName + '.style.visibility = "hidden"')
   else
		eval('document.' + layerName + '.visibility = "hidden"')
}  // Browser_LayerHide

//-----------------------------------------------------------------------------
//
// Beschrijving: Deze functie controleert een gegeven datum op correctheid
//               en op liggen in een bepaalde range. 
//               Kijk ook naar het Datum object voor een nog betere controle
//               van een datum. Ook FormCheck controleert data beter dan deze
//               eenvoudige controlefunctie.
//
// Parameters:   in datestr = de te controleren string.
//               in minyear = min toegestaan jaartal.
//               in maxyear = max toegestaan jaartal.
//               
// Resultaat:    true = datum ok, anders false.
//               
//-----------------------------------------------------------------------------

function Browser_DateCheck(datestr, minyear, maxyear)
{
   var ok = false          // functieresultaat
   var posSep1, posSep2    // locatie van separator ('-' of '/') in de datum
   var day, month, year    // de drie datum componenten

   var daymax = new Array(31,28,31,30,31,30,31,31,30,31,30,31)

   if (datestr.length >= 8 || datestr.length <= 10)
   {
      posSep1 = datestr.indexOf('-')
      if (posSep1 == -1) posSep1 = datestr.indexOf('/')
      posSep2 = datestr.lastIndexOf('-')
      if (posSep2 == -1) posSep2 = datestr.lastIndexOf('/')

      if (posSep1 != -1 && posSep2 != -1)
      {
         day = datestr.substring(0, posSep1)
         month = datestr.substring(posSep1 + 1, posSep2)
         year = datestr.substring(posSep2 + 1, datestr.length)
         if (year < 100) year += 2000

         if (year % 4 == 0) // schrikkeljaar?
         {
            if (year % 100 == 0) // eeuw?
            {
               if (year % 400 == 0) //schrikkeleeuw?
                  daymax[1] = 29
            }
            else
               daymax[1] = 29 // normaal schrikkeljaar
         }  // if

         ok = (month >= 1 && month <= 12)
              &&
              (day >= 1 && day <= daymax[month - 1])
              &&
              (year >= minyear && year <= maxyear)
      }  // if
   }  // if

   return ok
}  // Browser_DateCheck

//-----------------------------------------------------------------------------
//
// Beschrijving: Toont een popup-window op een browser onafhankelijke manier.
//               Diverse attributen (features) van het nieuw te maken window
//               kunnen worden gespecificeerd.
//               
// Parameters:   in url        = URL van te tonen webpagina.
//               in windowname = Naam van het aan te maken windowobject.
//               in winwidth   = Breedte van window in pixels.
//               in winheight  = Hoogte van window in pixels.
//               in toolbar    = PW_TOOLBAR_YES indien toolbar moet getoond.
//                               PW_TOOLBAR_NO indien toolbar verborgen moet.
//               in menubar    = PW_MENUBAR_YES of PW_MENUBAR_NO
//               in statusbar  = PW_STATUSBAR_YES of PW_STATUSBAR_NO
//               in location   = PW_LOCATION_YES of PW_LOCATION_NO
//               in resizable  = PW_RESIZABLE_YES of PW_RESIZABLE_NO
//                               Of het window resizable moet zijn.
//               in scrollbars = PW_TOOLBARS_YES of PW_TOOLBARS_NO
//               
// Resultaat:    Het geopende window-object.
//               
//-----------------------------------------------------------------------------

function Browser_PopupWindow(url, windowname, winwidth, winheight,
                             toolbar, menubar, statusbar, location,
                             resizable, scrollbars)
{
   var features     // feature specificatie voor nieuwe venster.
   var screenwidth  // Volledige breedte van het scherm.
   var screenheight // Volledige hoogte van het scherm.
   var left, top    // left en top van het nieuwe scherm.

   features = "height=" + winheight
   features = features + ",width=" + winwidth

   if (toolbar) features = features + ",toolbar"
   if (statusbar) features = features + ",status"
   if (menubar) features = features + ",menubar"
   if (location) features = features + ",location"
   if (resizable) features = features + ",resizable"
   if (scrollbars) features = features + ",scrollbars"

   if (this.appVersion >= 4)
   {
      screenwidth = screen.availWidth
      screenheight = screen.availHeight
      left = (screenwidth - winwidth) / 2
      top = (screenheight - winheight) / 2

      if (this.IsIE())
         features = features + ",left=" + left + ",top=" + top
      else
         features = features + ",screenX=" + left + ",screenY=" + top
   }

   return window.open(url, windowname, features)
}  // Browser_PopupWindow

//-----------------------------------------------------------------------------
//
// Beschrijving: Retourneert de displaybreedte in pixels. Indien de versie
//               van de browser kleiner is dan 4, wordt 640 pixels aangegeven.
//               
// Parameters:   Geen.
//               
// Resultaat:    Breedte van de display in pixels.
//               
//-----------------------------------------------------------------------------

function Browser_DisplayWidth()
{
   if (this.appVersion < 4)
      return 640
   else
      return screen.width
}  // Browser_DisplayWidth

//-----------------------------------------------------------------------------
//
// Beschrijving: Retourneert de displayhoogte in pixels. Indien de versie
//               van de browser kleiner is dan 4, wordt 400 pixels aangegeven.
//               
// Parameters:   Geen.
//               
// Resultaat:    Hoogte van de display in pixels.
//               
//-----------------------------------------------------------------------------

function Browser_DisplayHeight()
{
   if (this.appVersion < 4)
      return 400
   else
      return screen.height
}  // Browser_DisplayHeight

