/*!
 * initializer frontend
 * Version 1.0
 * Author MFE
 * Copyright (c) 2008-2009 Denbel, www.denbel.nl
 */

var skinName = 'default';

if( !console )
{
  var console =
  {
    log: function( v )
    {
    },
    error: function( v )
    {
    },
    warn: function( v )
    {
    }
  };
}

YAHOO.util.Event.onDOMReady( function( e )
{
  /**
   * Executed on Website ready
   * @param object
   * @return void
   */
  Denbel.Website.ready.subscribe( function( e )
  {
  } );
  
  Denbel.Website.init();
  Denbel.Website.loadResources( true );
  
  try
  {
    //YAHOO.util.Dom.addClass( document.getElementsByTagName( 'noscript' )[0], 'hidden' );
    
    if( YAHOO.env.ua.ie > 0 && YAHOO.env.ua.ie < 7 )
    {
      var text = '<p><strong>Let op</strong> U gebruikt een verouderde versie van Internet Explorer.</p>';
      text += '<p>Sommige onderdelen kunnen slecht of zelfs helemaal niet functioneren. <a target="_blank" href="http://www.denbel.nl/browsers/">Klik hier voor meer informatie.</a></p>';
      text += '<p style="margin-top:10px;">Nu bijwerken:';
      text += '<span>&nbsp;&nbsp;</span>';
      text += '<a style="text-decoration:none;" target="_blank" href="http://www.microsoft.com/windows/internet-explorer/default.aspx"><img style="vertical-align:text-bottom;" alt="Internet Explorer" title="Internet Explorer" src="/media/img/cms/ie.png" /></a>';
      text += '<span>&nbsp;&nbsp;</span>';
      text += '<a style="text-decoration:none;" target="_blank" href="http://www.getfirefox.com"><img style="vertical-align:text-bottom;" alt="Firefox" title="Firefox" src="/media/img/cms/ff.png" /></a>';
      text += '<span>&nbsp;&nbsp;</span>';
      text += '<a style="text-decoration:none;" target="_blank" href="http://www.apple.com/safari/download/"><img style="vertical-align:text-bottom;" alt="Apple Safari" title="Apple Safari" src="/media/img/cms/as.png" /></a>';
      text += '<span>&nbsp;&nbsp;</span>';
      text += '<a style="text-decoration:none;" target="_blank" href="http://www.google.com/chrome"><img style="vertical-align:text-bottom;" alt="Google Chrome" title="Google Chrome" src="/media/img/cms/gc.png" /></a>';
      text += '<span>&nbsp;&nbsp;</span>';
      text += '<a style="text-decoration:none;" target="_blank" href="http://www.opera.com/"><img style="vertical-align:text-bottom;" alt="Opera" title="Opera" src="/media/img/cms/op.png" /></a>';
      text += '<span>&nbsp;&nbsp;</span>';
      text += '</p>';
      
      var info = new Denbel.ui.InfoBar( 'info-bar' );
      info.show( Denbel.ui.InfoBar.ICON_WARN, text, null, false );
    }
    
    /** UI elements **/
    app.initMenu();
    app.initFonts();
    app.initActiveContent();
    app.initDonations();
    app.initWaitDialog();
    /*//*/
    
    /** functional */
    app.initFaces();
    app.initGallery();
    app.initSitemap();
    app.initContactForm();
    app.initAnchors();
    app.initKamerlidForm();
    app.initSubscribeNewsletter();
    app.initBecomeFriend();
    /*//*/
    
    // for IE 8
    if( YAHOO.util.Dom.inDocument( 'layout-body-hero' ) )
    {
      YAHOO.util.Dom.setStyle( 'layout-body-hero', 'height', 'auto' );
    }
    
    // notify server that javascript is supported
    var rpc = new Denbel.rpc.XmlRpcClient();
    var msg = rpc.createMessage( 'jsEnabled' );
    msg.setParameter( true );
    rpc.callService( msg, { success: function( res ){}, failure: function( res ){}, argument: {}} );
  }
  catch( ex )
  {
    if( DEBUG )
    {
      console.error( ex );
    }
  }
} );

var app =
{
  /**
   * instance
   * @var app
   */
  instance: null,
  
  /**
   * initializes donation buttons
   * @return void
   */
  initDonations: function()
  {
    var dons = YAHOO.util.Dom.getElementsByClassName( 'donatie', 'a' );
    
    if( dons.length == 0 )
    {
      return;
    }
    
    for( var i = 0; i < dons.length; i++ )
    {
      dons[i].innerHTML = '&nbsp;';
    }
  },
  
  /**
   * initializes menu
   * @return void
   */
  initMenu: function()
  {
    var mnu = null;
    
    mnu = new YAHOO.widget.MenuBar( 'main-nav' );
    mnu.render();
    mnu.show();
    
    mnu = new YAHOO.widget.MenuBar( 'sub-nav' );
    mnu.render();
    mnu.show();
    
    if( YAHOO.util.Dom.getStyle( 'layout-nav-sub', 'display' ) == 'none' )
    {
      YAHOO.util.Dom.getElementsByClassName( 'yuimenuitemlabel', 'a', YAHOO.util.Dom.get( 'main-nav' ), function( n, o )
      {
        YAHOO.util.Dom.addClass( n, 'no-sub-menu' );
      }, null, false );
    
      YAHOO.util.Dom.getElementsByClassName( 'yuimenubaritemlabel', 'span', YAHOO.util.Dom.get( 'main-nav' ), function( n, o )
      {
        YAHOO.util.Dom.addClass( n, 'no-sub-menu' );
      }, null, false );
    }
  },
  
  /**
   * initializes contact form
   * @return void
   */
  initContactForm: function()
  {
    if( !YAHOO.util.Dom.inDocument( 'fContact' ) )
    {
      return;
    }
    
    var rcp = null;
    
    if( YAHOO.util.Dom.inDocument( 'iRecaptchaPublic' ) )
    {
      rcp = YAHOO.util.Dom.get( 'iRecaptchaPublic' ).value;
    }  
    
    if( Recaptcha && rcp )
    {
      var captchas = YAHOO.util.Dom.getElementsByClassName( 'captcha', null, 'fContact' );
      
      if( captchas.length > 0 )
      {
        for( var i = 0; i < captchas.length; i++ )
        {
          try
          {
            Recaptcha.create( rcp, captchas[i].getAttribute( 'id' ),
            {
              theme: 'white',
              lang: 'nl',
              callback: function()
              {
              }
            } );
          }
          catch( ex )
          {
            console.error( ex );
          }
        }
      }
    }
    
    var fv = new Denbel.util.FormValidator( 'fContact',
    {
      blur: true
    } );
    
    fv.addValidator( 'iPostcode', Denbel.util.FormValidator.TYPE_CUSTOM, '', function( v )
    {
      var re = new RegExp( /[1-9]{1}[0-9]{3}\s?[a-zA-Z]{2}/i );
      return re.test( v );
    } );
    
    YAHOO.util.Event.on( 'fContact', 'submit', function( e, o )
    {
      YAHOO.util.Event.stopEvent( e );
      
      var validateCaptcha = function( o )
      {
        if( o.rc )
        {
          var rpc = new Denbel.rpc.XmlRpcClient();
          var msg = rpc.createMessage( 'verifyCaptcha' );
          
          msg.setParameter( o.rc.get_challenge() );
          msg.setParameter( o.rc.get_response() );
          
          rpc.callService( msg,
          {
            success: function( res )
            {
              res.argument.rc.reload();
              
              if( res.data[0] === true )
              {
                res.argument.frm.submit();
              }
              else
              {
                alert( 'De captcha is onjuist ingevoerd.' );
              }
            },
            failure: function( res )
            {
              alert( 'Er is een fout opgetreden bij het valideren van de captcha.' );
            },
            argument:
            {
              frm: o.frm,
              rc: o.rc
            }
          } );
        }
      };
      
      try
      {
        o.fv.validate(
        {
          success: function( res )
          {
            if( res.argument.rc )
            {
              res.argument.vc(
              {
                frm: res.argument.frm,
                rc: res.argument.rc
              } );
            }
            else
            {
              res.argument.frm.submit();
            }
          },
          failure: function( res )
          {
            alert( 'Niet alle velden zijn juist ingevuld.' );
          },
          argument:
          {
            frm: this,
            vc: validateCaptcha,
            rc: o.rc
          }
        } );
      }
      catch( ex )
      {
      }
    },
    {
      fv: fv,
      rc: Recaptcha
    } );
  },
  
  /**
   * initializes sitemap
   * @return void
   */
  initSitemap: function()
  {
    if( !YAHOO.util.Dom.inDocument( 'page-tree' ) )
    {
      return;
    }
    
    var tv = new YAHOO.widget.TreeView( 'page-tree' );
    var r = new YAHOO.widget.TextNode( 'The Rights Forum', tv.getRoot(), true );
    r.data.key = '';
    
    tv.setExpandAnim( YAHOO.widget.TVAnim.FADE_IN );
    tv.setCollapseAnim( YAHOO.widget.TVAnim.FADE_OUT );

    tv.setDynamicLoad( app._loadDataForNode );
    tv.subscribe( 'labelClick', function( n )
    {
      window.location = '/' + n.data.key;
    } );
    
    tv.render();
    
    //app._loadDataForNode( r, null, true );
  },
  
  /**
   * Loads dynamic node data
   * @param YAHOO.widget.TreeNode node
   * @param Function onCompleteCallback
   * @param Boolean expandAll
   * @return void
   */
  _loadDataForNode: function( node, onCompleteCallback, expandAll )
  {
    var id = null;
    
    if( node.data && node.data.id )
    {
      id = node.data.id;
    }
    
    var tv = YAHOO.widget.TreeView.getTree( 'page-tree' );
    
    tv.setCollapseAnim( null );
    tv.removeChildren( node );
    tv.setCollapseAnim( YAHOO.widget.TVAnim.FADE_OUT );
    
    var rpc = new Denbel.rpc.XmlRpcClient();
    var msg = rpc.createMessage( 'call' );
    
    msg.setParameter( 'content' );
    msg.setParameter( 'getPages' );
    msg.setParameter( id );
    
    rpc.callService( msg,
    {
      success: function( res )
      {
        var n = null;
        var r = res.argument.root;
        var v = null;
        
        if( res.data[0].length > 0 )
        {
          for( var i = 0; i < res.data[0].length; i++ )
          {
            if( res.data[0][i].get( 'localizedValues' ) )
            {
              v = res.data[0][i].get( 'localizedValues' ).get( 'nl-nl' ).get( 'value' );
              
              if( v == '' )
              {
                v = res.data[0][i].get( 'name' );
              }
            }
            else
            {
              v = res.data[0][i].get( 'name' );
            }
            
            n = new YAHOO.widget.TextNode( v, r, true );
            n.data.id = res.data[0][i].get( 'pageId' );
            n.data.key = res.data[0][i].get( 'key' );
            
            new YAHOO.widget.TextNode( '--dummy--', n, false );
          }
        }
        else
        {
          r.isLeaf = true;
        }
        
        if( res.argument.onCompleteCallback )
        {
          res.argument.onCompleteCallback();
        }
        else
        {
          res.argument.tree.render();
        }
        
        if( res.argument.expandAll )
        {
          res.argument.tree.expandAll();
        }
      },
      failure: function( res )
      {
      },
      argument:
      {
        tree: tv,
        root: node,
        onCompleteCallback: onCompleteCallback,
        expandAll: expandAll
      }
    } );
  },
  
  /**
   * initializes gallery
   * @return void
   */
  initGallery: function()
  {
    if( !YAHOO.util.Dom.inDocument( 'gallery-photo-nav' ) )
    {
      return;
    }
    
    var anims =
    {
      inAnim: new YAHOO.util.Anim( 'gallery-photo-nav',
      {
        'opacity':
        {
          'to': 1.0
        }
      }, 0.2 ),
      outAnim: new YAHOO.util.Anim( 'gallery-photo-nav',
      {
        'opacity':
        {
          'to': 0.0
        }
      }, 0.2 )
    };
    
    var _onImageHover = function( e, o )
    {
      if( o.outAnim.isAnimated() )
      {
        o.outAnim.stop();
      }
      
      o.inAnim.animate();
    };
    
    var _onImageLeave = function( e, o )
    {
      if( o.inAnim.isAnimated() )
      {
        o.inAnim.stop();
      }
      
      o.outAnim.animate();
    };
    
    var _onPhotoLinkClicked = function( e, o )
    {
      YAHOO.util.Event.stopEvent( e );
      
      var currentId = YAHOO.util.Dom.get( 'gallery-photo-element' ).getAttribute( 'alt' );
      
      var nodeId = this.getAttribute( 'href' );
      nodeId = nodeId.substring( nodeId.indexOf( '#' ) + 1 );
      
      if( currentId == nodeId )
      {
        return;
      }
      
      var i = 0;
      
      var selected = YAHOO.util.Dom.getElementsByClassName( 'selected', 'a' );
      for( i = 0; i < selected.length; i++ )
      {
        if( selected[i].getAttribute( 'href' ) == this.getAttribute( 'href' ) )
        {
          continue;
        }
        
        YAHOO.util.Dom.removeClass( selected[i], 'selected' );
      }
      
      var el = null;
      var links = YAHOO.util.Dom.getElementsByClassName( 'photo-link', 'a' );
      
      for( i = 0; i < links.length; i++ )
      {
        if( YAHOO.util.Dom.hasClass( links[i], 'prev' ) || YAHOO.util.Dom.hasClass( links[i], 'next' ) )
        {
          continue;
        }
        
        if( links[i].getAttribute( 'href' ) == this.getAttribute( 'href' ) )
        {
          el = links[i];
          break;
        }
      }

      var anim = new YAHOO.util.Anim( 'gallery-photo-element',
      {
        'opacity':
        {
          'from': 1.0,
          'to': 0.0
        }
      }, 0.5 );
      
      anim.onComplete.subscribe( function( e, a, o )
      {
        YAHOO.util.Dom.addClass( o.el, 'selected' );
      },
      {
        el: el
      } );
      
      var rpc = new Denbel.rpc.XmlRpcClient();
      var msg = rpc.createMessage( 'call' );
      
      msg.setParameter( 'gallery' );
      msg.setParameter( 'getPhoto' );
      msg.setParameter( nodeId );
      
      rpc.callService( msg,
      {
        success: function( res )
        {
          if( res.argument.target && res.data[0] )
          {
            res.argument.target.innerHTML = res.data[0];
            
//            YAHOO.util.Dom.setStyle( 'gallery-photo-nav', 'top', parseInt( YAHOO.util.Dom.getY( 'gallery-photo-element' ) + 10 ) + 'px' );
//            YAHOO.util.Dom.setStyle( 'gallery-photo-nav', 'left', YAHOO.util.Dom.getX( 'gallery-photo-element' ) + 'px' );
//            YAHOO.util.Dom.setStyle( 'gallery-photo-nav', 'opacity', 1.0 );
            YAHOO.util.Dom.setStyle( 'gallery-photo-element', 'opacity', 0.0 );
            
            var anims =
            {
              inAnim: new YAHOO.util.Anim( 'gallery-photo-nav',
              {
                'opacity':
                {
                  'to': 1.0
                }
              }, 0.2 ),
              outAnim: new YAHOO.util.Anim( 'gallery-photo-nav',
              {
                'opacity':
                {
                  'to': 0.0
                }
              }, 0.2 )
            };
            
//            YAHOO.util.Event.on( 'gallery-photo-nav', 'mouseover', res.argument.obj.fnImgHover, anims );
//            YAHOO.util.Event.on( 'gallery-photo-nav', 'mouseout', res.argument.obj.fnImgLeave, anims );
            
            YAHOO.util.Event.on( 'gallery-photo-nav-prev', 'click', res.argument.obj.fnOnPhotoLinkClicked,
            {
              fnImgHover: res.argument.obj.fnImgHover,
              fnImgLeave: res.argument.obj.fnImgLeave,
              fnOnPhotoLinkClicked: res.argument.obj.fnOnPhotoLinkClicked
            } );
            
            YAHOO.util.Event.on( 'gallery-photo-nav-next', 'click', res.argument.obj.fnOnPhotoLinkClicked,
            {
              fnImgHover: res.argument.obj.fnImgHover,
              fnImgLeave: res.argument.obj.fnImgLeave,
              fnOnPhotoLinkClicked: res.argument.obj.fnOnPhotoLinkClicked
            } );
            
            var showPhoto = new YAHOO.util.Anim( 'gallery-photo-element',
            {
              'opacity':
              {
                'from': 0.0,
                'to': 1.0
              }
            }, 0.5 );
            
            YAHOO.util.Event.onContentReady( 'gallery-photo-element', function( o )
            {
              o.showPhoto.animate();
            },
            {
              showPhoto: showPhoto
            } );
            
            if( typeof Cufon != 'undefined' )
            {
              Cufon.refresh();
              app.onCufonRefresh();
            }
            else if( typeof sIFR != 'undefined' )
            {
              try
              {
                sIFR.replace( sIFRfonts.gillsans,
                {
                  selector: 'h4',
                  transparent: true,
                  forceSingleLine: true,
                  preventWrap: true,
                  css:
                  {
                    '.sIFR-root':
                    {
                      'color': '#007BC0',
                      'text-transform': 'uppercase',
                      'letter-spacing': 1,
                      'font-weight': 'bold'
                    }
                  }
                } );
              }
              catch( ex )
              {
              }
            }
          }
        },
        failure: function( res )
        {
          if( res.argument.target )
          {
            res.argument.target.innerHTML = '<p>De foto kon niet worden geladen.</p>';
          }
        },
        argument:
        {
          target: YAHOO.util.Dom.get( 'gallery-box-photo-container' ),
          obj: o
        }
      } );
      
      anim.animate();
    };
    
    var links = YAHOO.util.Dom.getElementsByClassName( 'photo-link', 'a' );
    
    for( var i = 0; i < links.length; i++ )
    {
      YAHOO.util.Event.on( links[i], 'click', _onPhotoLinkClicked,
      {
        fnImgHover: _onImageHover,
        fnImgLeave: _onImageLeave,
        fnOnPhotoLinkClicked: _onPhotoLinkClicked
      } );
    }
    
    var _onAlbumLinkClicked = function( e, o )
    {
      YAHOO.util.Event.stopEvent( e );
      
      var albumId = this.getAttribute( 'href' );
      albumId = albumId.substring( albumId.indexOf( '#' ) + 1 );
      
      var page = albumId.split( '/' );
      albumId = page[0];
      page = page[1];
      
      YAHOO.util.Dom.get( 'layout-body-container-inner' ).innerHTML = '<div class="align-center" style="padding:20px;"><img alt="" src="/media/img/waitloader.gif" /></div>';
      
      var rpc = new Denbel.rpc.XmlRpcClient();
      var msg = rpc.createMessage( 'call' );
      
      msg.setParameter( 'gallery' );
      msg.setParameter( 'getAlbumPhotos' );
      msg.setParameter( albumId );
      msg.setParameter( page );
      
      rpc.callService( msg,
      {
        success: function( res )
        {
          YAHOO.util.Dom.get( 'layout-body-container' ).innerHTML = res.data[0];
          
          if( typeof Cufon != 'undefined' )
          {
            Cufon.refresh();
            app.onCufonRefresh();
          }
          else if( typeof sIFR != 'undefined' )
          {
            try
            {
              sIFR.replace( sIFRfonts.gillsans,
              {
                selector: 'h4',
                transparent: true,
                forceSingleLine: true,
                preventWrap: true,
                css:
                {
                  '.sIFR-root':
                  {
                    'color': '#007BC0',
                    'text-transform': 'uppercase',
                    'letter-spacing': 1,
                    'font-weight': 'bold'
                  }
                }
              } );
            }
            catch( ex )
            {
            }
          }
          
          var links = YAHOO.util.Dom.getElementsByClassName( 'album-link', 'a' );
          var i = null;
          
          for( i = 0; i < links.length; i++ )
          {
            YAHOO.util.Event.on( links[i], 'click', res.argument._onAlbumLinkClicked,
            {
              _onAlbumLinkClicked: res.argument._onAlbumLinkClicked,
              _onImageHover: res.argument._onImageHover,
              _onImageLeave: res.argument._onImageLeave,
              _onPhotoLinkClicked: res.argument._onPhotoLinkClicked
            } );
          }
          
          links = YAHOO.util.Dom.getElementsByClassName( 'photo-link', 'a' );
          
          for( i = 0; i < links.length; i++ )
          {
            YAHOO.util.Event.on( links[i], 'click', res.argument._onPhotoLinkClicked,
            {
              fnImgHover: res.argument._onImageHover,
              fnImgLeave: res.argument._onImageLeave,
              fnOnPhotoLinkClicked: res.argument._onPhotoLinkClicked
            } );
          }
        },
        failure: function( res )
        {
        },
        argument:
        {
          _onAlbumLinkClicked: o._onAlbumLinkClicked,
          _onImageHover: o._onImageHover,
          _onImageLeave: o._onImageLeave,
          _onPhotoLinkClicked: o._onPhotoLinkClicked
        }
      } );
    };
    
    links = YAHOO.util.Dom.getElementsByClassName( 'album-link', 'a' );
    
    for( var i = 0; i < links.length; i++ )
    {
      YAHOO.util.Event.on( links[i], 'click', _onAlbumLinkClicked,
      {
        _onAlbumLinkClicked: _onAlbumLinkClicked,
        _onImageHover: _onImageHover,
        _onImageLeave: _onImageLeave,
        _onPhotoLinkClicked: _onPhotoLinkClicked
      } );
    }
    
//    YAHOO.util.Dom.setStyle( 'gallery-photo-nav', 'top', parseInt( YAHOO.util.Dom.getY( 'gallery-photo-element' ) + 10 ) + 'px' );
//    YAHOO.util.Dom.setStyle( 'gallery-photo-nav', 'left', YAHOO.util.Dom.getX( 'gallery-photo-element' ) + 'px' );
//    YAHOO.util.Dom.setStyle( 'gallery-photo-nav', 'opacity', 1.0 );
    
//    YAHOO.util.Event.on( 'gallery-photo-nav', 'mouseover', _onImageHover, anims );
//    YAHOO.util.Event.on( 'gallery-photo-nav', 'mouseout', _onImageLeave, anims );
  },
  
  /**
   * initializes faces
   * @return void
   */
  initFaces: function()
  {
    if( !YAHOO.util.Dom.inDocument( 'faces-pictures' ) )
    {
      return;
    }
    
    var pictureLinks = YAHOO.util.Dom.getElementsByClassName( 'picture-frame-link', 'a' );
    
    var _onPictureLinkClicked = function( e, o )
    {
      if( e )
      {
        YAHOO.util.Event.stopEvent( e );
      }
      
      var nodeId = this.getAttribute( 'href' );
      nodeId = nodeId.substring( nodeId.indexOf( '#' ) + 1 );
      
      if( !nodeId )
      {
        return;
      }
      
      var active = YAHOO.util.Dom.getElementsByClassName( 'picture-frame-active', 'div' );
      
      for( var i = 0; i < active.length; i++ )
      {
        YAHOO.util.Dom.removeClass( active[i], 'picture-frame-active' );
      }
      
      var sibNodeId = null;
      var sibling = null;
      
      if( ( sibling = YAHOO.util.Dom.getNextSiblingBy( YAHOO.util.Dom.get( 'faces-picture-' + nodeId ), function( n )
      {
        return ( YAHOO.util.Dom.hasClass( n, 'picture-frame' ) );
      } ) ) )
      {
        sibNodeId = YAHOO.util.Dom.getFirstChildBy( sibling, function( n )
        {
          return ( n.tagName.toLowerCase() == 'a' );
        } );
        
        if( sibNodeId )
        {
          sibNodeId = sibNodeId.getAttribute( 'href' );
          sibNodeId = sibNodeId.substring( sibNodeId.indexOf( '#' ) + 1 );
          
          YAHOO.util.Dom.get( 'faces-nav-next' ).setAttribute( 'href', '#' + sibNodeId );
          YAHOO.util.Dom.setStyle( 'faces-nav-next', 'visibility', 'visible' );
        }
        else
        {
          YAHOO.util.Dom.setStyle( 'faces-nav-next', 'visibility', 'hidden' );
        }
      }
      else
      {
        YAHOO.util.Dom.setStyle( 'faces-nav-next', 'visibility', 'hidden' );
      }
      
      if( ( sibling = YAHOO.util.Dom.getPreviousSiblingBy( YAHOO.util.Dom.get( 'faces-picture-' + nodeId ), function( n )
      {
        return ( YAHOO.util.Dom.hasClass( n, 'picture-frame' ) );
      } ) ) )
      {
        sibNodeId = YAHOO.util.Dom.getFirstChildBy( sibling, function( n )
        {
          return ( n.tagName.toLowerCase() == 'a' );
        } );
        
        if( sibNodeId )
        {
          sibNodeId = sibNodeId.getAttribute( 'href' );
          sibNodeId = sibNodeId.substring( sibNodeId.indexOf( '#' ) + 1 );
          
          YAHOO.util.Dom.get( 'faces-nav-prev' ).setAttribute( 'href', '#' + sibNodeId );
          YAHOO.util.Dom.setStyle( 'faces-nav-prev', 'visibility', 'visible' );
        }
        else
        {
          YAHOO.util.Dom.setStyle( 'faces-nav-prev', 'visibility', 'hidden' );
        }
      }
      else
      {
        YAHOO.util.Dom.setStyle( 'faces-nav-prev', 'visibility', 'hidden' );
      }
      
      var doc = null;
      
      if( YAHOO.env.ua.webkit > 0 )
      {
        doc = document.body;
      }
      else
      {
        doc = document.getElementsByTagName( 'html' )[0];
      }
      
      new YAHOO.util.Scroll( doc,
      {
        'scroll':
        {
          'to': [0, 0]
        }
      }, 0.5, YAHOO.util.Easing.easeOut ).animate();
      
      var target = YAHOO.util.Dom.get( 'layout-body-default-right' );
      target.innerHTML = '<div class="content-box-small"><div class="hd"></div><div class="bd" style="padding-top:10px;padding-bottom:10px;text-align:center;"><img alt="" src="/media/img/waitloader.gif" /></div><div class="ft"></div></div>';
      
      var rpc = new Denbel.rpc.XmlRpcClient();
      var msg = rpc.createMessage( 'call' );
      
      msg.setParameter( 'faces' );
      msg.setParameter( 'loadFaceInfo' );
      msg.setParameter( nodeId );
      
      rpc.callService( msg,
      {
        success: function( res )
        {
          res.argument.target.innerHTML = res.data[0];
          
          if( typeof Cufon != 'undefined' )
          {
            Cufon.refresh();
            app.onCufonRefresh();
          }
          else if( typeof sIFR != 'undefined' )
          {
            try
            {
              sIFR.replace( sIFRfonts.gillsans,
              {
                selector: 'h3.font',
                transparent: true,
                forceSingleLine: true,
                preventWrap: true,
                css:
                {
                  '.sIFR-root':
                  {
                    'color': '#FFFFFF',
                    'text-transform': 'uppercase',
                    'letter-spacing': 1,
                    'font-weight': 'bold'
                  }
                }
              } );
            }
            catch( ex )
            {
            }
          }
          
          YAHOO.util.Dom.addClass( 'faces-picture-' + nodeId, 'picture-frame-active' );
        },
        failure: function( res )
        {
          
        },
        argument:
        {
          target: target
        }
      } );
    };
    
    for( var i = 0; i < pictureLinks.length; i++ )
    {
      YAHOO.util.Event.on( pictureLinks[i], 'click', _onPictureLinkClicked, null );
      
      if( YAHOO.util.Dom.hasClass( pictureLinks[i], 'selected' ) )
      {
        _onPictureLinkClicked.call( pictureLinks[i] );
      }
    }
    
    YAHOO.util.Event.on( 'faces-nav-next', 'click', function( e, o )
    {
      YAHOO.util.Event.stopEvent( e );
      
      var id = this.getAttribute( 'href' );
      id = id.substring( id.indexOf( '#' ) + 1 );
      
      var piclinks = YAHOO.util.Dom.getElementsBy( function( n )
      {
        return true;
      }, 'a', 'faces-pictures' );
      
      if( piclinks.length > 0 )
      {
        var gotIndex = -1;
        var href = null;
        var nextId = null;
        
        for( var i = 0; i < piclinks.length; i++ )
        {
          href = piclinks[i].getAttribute( 'href' );
          href = href.substring( href.indexOf( '#' ) + 1 );

          if( gotIndex == -1 )
          {
            if( href == id )
            {
              gotIndex = i;
            }
          }
          else
          {
            nextId = href;
            break;
          }
        }
        
        var prevId = null;
        
        if( gotIndex > 0 )
        {
          prevId = piclinks[( gotIndex - 1 )].getAttribute( 'href' );
          prevId = prevId.substring( prevId.indexOf( '#' ) + 1 );
        }
        
        if( nextId )
        {
          this.setAttribute( 'href', '#' + nextId );
        }
        else
        {
          YAHOO.util.Dom.setStyle( this, 'visibility', 'hidden' );
        }
        
        if( prevId )
        {
          YAHOO.util.Dom.get( 'faces-nav-prev' ).setAttribute( 'href', '#' + prevId );
          YAHOO.util.Dom.setStyle( 'faces-nav-prev', 'visibility', 'visible' );
        }
        
        if( gotIndex > -1 )
        {
          o.fn.call( piclinks[gotIndex] );
        }
      }
    },
    {
      fn: _onPictureLinkClicked
    } );
    
    YAHOO.util.Event.on( 'faces-nav-prev', 'click', function( e, o )
    {
      YAHOO.util.Event.stopEvent( e );
      
      var id = this.getAttribute( 'href' );
      id = id.substring( id.indexOf( '#' ) + 1 );
      
      var piclinks = YAHOO.util.Dom.getElementsBy( function( n )
      {
        return true;
      }, 'a', 'faces-pictures' );
      
      if( piclinks.length > 0 )
      {
        var gotIndex = -1;
        var href = null;
        var nextId = null;
        
        for( var i = 0; i < piclinks.length; i++ )
        {
          href = piclinks[i].getAttribute( 'href' );
          href = href.substring( href.indexOf( '#' ) + 1 );

          if( gotIndex == -1 )
          {
            if( href == id )
            {
              gotIndex = i;
            }
          }
          else
          {
            nextId = href;
            break;
          }
        }
        
        var prevId = null;
        
        if( gotIndex > 0 )
        {
          prevId = piclinks[( gotIndex - 1 )].getAttribute( 'href' );
          prevId = prevId.substring( prevId.indexOf( '#' ) + 1 );
        }
        
        if( nextId )
        {
          YAHOO.util.Dom.get( 'faces-nav-next' ).setAttribute( 'href', '#' + nextId );
          YAHOO.util.Dom.setStyle( 'faces-nav-next', 'visibility', 'visible' );
        }
        else
        {
          YAHOO.util.Dom.setStyle( 'faces-nav-next', 'visibility', 'hidden' );
        }
        
        if( prevId )
        {
          this.setAttribute( 'href', '#' + prevId );
          YAHOO.util.Dom.setStyle( this, 'visibility', 'visible' );
        }
        else
        {
          YAHOO.util.Dom.setStyle( this, 'visibility', 'hidden' );
        }
        
        if( gotIndex > -1 )
        {
          o.fn.call( piclinks[gotIndex] );
        }
      }
    },
    {
      fn: _onPictureLinkClicked
    } );
  },
  
  /**
   * initializes anchors
   * @return void
   */
  initAnchors: function()
  {
    var i = null;
    var a = YAHOO.util.Dom.getElementsByClassName( 'target_blank', 'a' );
    
    for( i = 0; i < a.length; i++ )
    {
      a[i].setAttribute( 'target', '_blank' );
    }
    
    a = YAHOO.util.Dom.getElementsByClassName( 'print', 'a' );
    
    for( i = 0; i < a.length; i++ )
    {
      YAHOO.util.Event.addListener( a[i], 'click', function( e )
      {
        YAHOO.util.Event.stopEvent( e );
        
        if( window.print )
        {
          window.print();
        }
        else
        {
          alert( 'Klik op Afdrukken in het menu Bestand van uw browser.' );
        }
      } );
    }
  },
  
  /**
   * initializes wait dialog
   * @return void
   */
  initWaitDialog: function()
  {
    if( !Denbel.Website._waitDialog )
    {
      return;
    }
    
    Denbel.Website._waitDialog.setBody( '<div style="text-align:center;"><img alt="" src="/media/img/waitloader.gif" /></div>' );
    Denbel.Website._waitDialog.cfg.queueProperty( 'width', '100px' );
    Denbel.Website._waitDialog.render();
  },
  
  /**
   * initializes tooltips
   * @return void
   */
  initTooltips: function()
  {
    if( !YAHOO.util.Dom.inDocument( 'yui-tt-container' ) )
    {
      if( DEBUG )
      {
        alert( 'Error: yui-tt-container not in document' );
      }
    }
    
    var tips = YAHOO.util.Dom.getElementsByClassName( 'help' );
    
    if( !tips || tips.length == 0 )
    {
      return;
    }
    
    YAHOO.util.Dom.get( 'yui-tt-container' ).innerHTML = '';
    
    var t = new YAHOO.widget.Tooltip( 'yui-tt-container',
    {
      context: tips,
      showDelay: 0,
      hideDelay: 0,
      autodismissdelay: 65000
    } );
    
    t.contextTriggerEvent.subscribe( function( e, a, o )
    {
      var x = YAHOO.util.Dom.getX( a );
      var y = YAHOO.util.Dom.getY( a );
      var h = YAHOO.util.Dom.getRegion( this.element ).height;
      var top = ( ( y - h ) - 4 );
      
      YAHOO.util.Dom.setStyle( this.element, 'top', top + 'px' );
      YAHOO.util.Dom.setStyle( this.element, 'left', x + 'px' );
    } );
  },
  
  /**
   * Should be called when Cufon refreshes to wake up IE browsers
   * @return void
   */
  onCufonRefresh: function()
  {
    Cufon.now();
    
    if( YAHOO.env.ua.ie > 0 )
    {
      var canvas = YAHOO.util.Dom.getElementsBy( function( n )
      {
        return true;
      }, 'cufoncanvas', 'layout-nav-bottom' );
      
      for( var i = 0; i < canvas.length; i++ )
      {
        YAHOO.util.Dom.setStyle( canvas[i], 'position', 'relative' );
        YAHOO.util.Dom.setStyle( canvas[i], 'position', 'absolute' );
      }
    }
  },
  
  /**
   * initializes fonts
   * @return void
   */
  initFonts: function()
  {
    if( typeof Cufon != 'undefined' )
    {
      try
      {
        Cufon.now();
        Cufon.replace( 'li.yuimenuitem .mnu' );
        
//        Cufon.replace( 'li.yuimenuitem .mnu.yuimenubaritemlabel-active',
//        {
//          fontWeight: 'bold'
//        } );
        
        Cufon.replace( 'h2' );
        Cufon.replace( 'h3.font' );
        Cufon.replace( 'h4' );
        Cufon.replace( '.quote-large' );
        Cufon.replace( '.quote-name' );
        Cufon.replace( '.quote-title' );
        Cufon.replace( '.kamerlid-label' );
        Cufon.replace( '#layout-nav-bottom .bottom-mnu' );
        //Cufon.replace( '#layout-nav-bottom span' );
        
//        app.onCufonRefresh();
      }
      catch( ex )
      {
        console.error( ex );
      }
    }
    else if( typeof sIFR != 'undefined' )
    {
      app.initSIFR();
    }
    else
    {
      console.warn( 'no Cufon, no sIFR' );
    }
  },
  
  /**
   * initializes SIFR text
   * @return void
   */
  initSIFR: function()
  {
    try
    {
      if( typeof sIFR != 'undefined' )
      {
        sIFR.replace( sIFRfonts.gillsans,
        {
          selector: 'li.yuimenuitem .mnu.yuimenubaritemlabel-active',
          wmode: 'transparent',
          forceSingleLine: true,
          preventWrap: true,
          css:[
            '.sIFR-root { color: #ffffff; text-transform: uppercase; letter-spacing: 0; cursor: pointer; font-weight: bold; }',
            '.sIFR-root a { color: #ffffff; text-decoration: none; }',
            '.sIFR-root a:hover { color: #ffffff; text-decoration: none; }',
            '.sIFR-root a:visited { color: #ffffff; text-decoration: none; }'
          ]
        } );
        
        sIFR.replace( sIFRfonts.gillsans,
        {
          selector: 'li.yuimenuitem .mnu',
          wmode: 'transparent',
          forceSingleLine: true,
          preventWrap: true,
          css:[
            '.sIFR-root { color: #ffffff; text-transform: uppercase; letter-spacing: 0; cursor: pointer; font-weight: normal; }',
            '.sIFR-root a { color: #ffffff; text-decoration: none; }',
            '.sIFR-root a:hover { color: #ffffff; text-decoration: none; }',
            '.sIFR-root a:visited { color: #ffffff; text-decoration: none; }'
          ]
        } );
        
        sIFR.replace( sIFRfonts.gillsans,
        {
          selector: '#layout-nav-bottom .bottom-mnu',
          transparent: true,
          forceSingleLine: true,
          preventWrap: true,
          css: [
            '.sIFR-root { color: #003883; text-transform: uppercase; letter-spacing: 0; cursor: pointer; font-weight: normal; text-decoration: none; }',
            '.sIFR-root a { color: #003883; text-decoration: none; }',
            '.sIFR-root a:hover { color: #003883; text-decoration: none; }',
            '.sIFR-root a:visited { color: #003883; text-decoration: none; }'
          ]
        } );
        
        sIFR.replace( sIFRfonts.gillsans,
        {
          selector: '#layout-nav-bottom span',
          transparent: true,
          forceSingleLine: true,
          preventWrap: true,
          css:
          {
            '.sIFR-root':
            {
              'color': '#003883',
              'text-transform': 'uppercase',
              'letter-spacing': 0,
              'font-weight': 'normal'
            }
          }
        } );
        
        sIFR.replace( sIFRfonts.gillsans,
        {
          selector: 'h2',
          transparent: true,
          forceSingleLine: true,
          preventWrap: true,
          css:
          {
            '.sIFR-root':
            {
              'color': '#007BC0',
              'text-transform': 'uppercase',
              'letter-spacing': 1,
              'font-weight': 'bold'
            }
          }
        } );
        
        sIFR.replace( sIFRfonts.gillsans,
        {
          selector: 'h3.font',
          transparent: true,
          forceSingleLine: true,
          preventWrap: true,
          css:
          {
            '.sIFR-root':
            {
              'color': '#FFFFFF',
              'text-transform': 'uppercase',
              'letter-spacing': 1,
              'font-weight': 'bold'
            }
          }
        } );
        
        sIFR.replace( sIFRfonts.gillsans,
        {
          selector: 'h4',
          transparent: true,
          forceSingleLine: true,
          preventWrap: true,
          css:
          {
            '.sIFR-root':
            {
              'color': '#007BC0',
              'text-transform': 'uppercase',
              'letter-spacing': 1,
              'font-weight': 'bold'
            }
          }
        } );
        
        sIFR.replace( sIFRfonts.gillsans,
        {
          selector: '.quote-large',
          transparent: true,
          forceSingleLine: false,
          preventWrap: false,
          css:
          {
            '.sIFR-root':
            {
              'font-size': '20px',
              'color': '#007BC0',
              'letter-spacing': 1,
              'font-weight': 'bold',
              'text-align': 'center',
              'display': 'block'
              //,'text-indent': '25px'
            }
          }
        } );
        
        sIFR.replace( sIFRfonts.gillsans,
        {
          selector: '.quote-name',
          transparent: true,
          forceSingleLine: true,
          preventWrap: true,
          css:
          {
            '.sIFR-root':
            {
              'font-size': '16px',
              'color': '#007BC0',
              'text-transform': 'uppercase',
              'letter-spacing': 0,
              'font-weight': 'normal',
              'text-align': 'center'
            }
          }
        } );

        sIFR.replace( sIFRfonts.gillsans,
        {
          selector: '.quote-title',
          transparent: true,
          forceSingleLine: false,
          preventWrap: false,
          css:
          {
            '.sIFR-root':
            {
              'font-size': '16px',
              'color': '#007BC0',
              'letter-spacing': 0,
              'font-weight': 'normal',
              'text-align': 'center',
              'font-style': 'italic'
            }
          }
        } );
      }
    }
    catch( ex )
    {
    }
  },
  
  /**
   * initializes active content
   * @return void
   */
  initActiveContent: function()
  {
    if( YAHOO.util.Dom.inDocument( 'layout-body-hero' ) )
    {
      try
      {
        var heroSwf = YAHOO.widget.SWF( 'layout-body-hero-container', '/media/swf/trf_hero.swf',
        {
          version: 9.115,
          useExpressInstall: true,
          fixedAttributes:
          {
            allowScriptAccess: 'always',
            play: true,
            menu: false,
            height: 201
          }
        } );
      }
      catch( ex )
      {
        //console.error( ex );
      }
    }
  },
  
  /**
   * Initializes Email een kamerlid form checker
   */
  initKamerlidForm: function(){
	  if( !YAHOO.util.Dom.inDocument( 'fEmailKamerlid' ) ){
	      return;
	   }
	  
	  var fv = new Denbel.util.FormValidator( 'fEmailKamerlid',{ blur: true  } );
	  
	  fv.addValidator( 'iEmail', Denbel.util.FormValidator.TYPE_CUSTOM, '', function( v ){
	      var re = new RegExp(/(?:[\.\w-]+)@(?:[\w-]+\.)+[a-z]{2,6}/i);
	      return re.test( v );
	    } );
	  
	  YAHOO.util.Event.on( 'fEmailKamerlid', 'submit', function( e, o ){
	      YAHOO.util.Event.stopEvent( e );
	      
	      try {
	        o.fv.validate(
	        {
	          success: function( res ) {
	            if( res.argument.rc ) {
	              res.argument.vc(
	              {
	                frm: res.argument.frm,
	                rc: res.argument.rc
	              } );
	            } else {
	              res.argument.frm.submit();
	            }
	          },
	          failure: function( res ){
	            alert( 'Niet alle velden zijn juist ingevuld.' );
	          },
	          argument: {
	            frm: this
	          }
	        } );
	      }
	      catch( ex ){ }
	    },{ fv: fv } );
  },
  
  /**
   * Initializes newsletter subscribtion form checker
   */
  initSubscribeNewsletter: function(){
	  if( !YAHOO.util.Dom.inDocument( 'fNewsletterSubscribe' ) ){
	      return;
	   }
	  
	  var fv = new Denbel.util.FormValidator( 'fNewsletterSubscribe',{ blur: true  } );
	  
	  fv.addValidator( 'iEmail', Denbel.util.FormValidator.TYPE_CUSTOM, '', function( v ){
	      var re = new RegExp(/(?:[\.\w-]+)@(?:[\w-]+\.)+[a-z]{2,6}/i);
	      return re.test( v );
	    } );
	  
	  YAHOO.util.Event.on( 'fNewsletterSubscribe', 'submit', function( e, o ){
	      YAHOO.util.Event.stopEvent( e );
	      
	      try {
	        o.fv.validate(
	        {
	          success: function( res ) {
	            if( res.argument.rc ) {
	              res.argument.vc(
	              {
	                frm: res.argument.frm,
	                rc: res.argument.rc
	              } );
	            } else {
	              res.argument.frm.submit();
	            }
	          },
	          failure: function( res ){
	            alert( 'Niet alle velden zijn juist ingevuld.' );
	          },
	          argument: {
	            frm: this
	          }
	        } );
	      }
	      catch( ex ){ }
	    },{ fv: fv } );
  },
  
  
  /**
   * Initializes the Become friend form checker
   */
  initBecomeFriend: function(){
	  if( !YAHOO.util.Dom.inDocument( 'fBecomeFriend' ) ){
	      return;
	   }
	  
	  var fv = new Denbel.util.FormValidator( 'fBecomeFriend',{ blur: true  } );
	  
	  fv.addValidator( 'iEmail', Denbel.util.FormValidator.TYPE_CUSTOM, '', function( v ){
	      var re = new RegExp(/(?:[\.\w-]+)@(?:[\w-]+\.)+[a-z]{2,6}/i);
	      return re.test( v );
	    } );
	  
	  YAHOO.util.Event.on( 'fBecomeFriend', 'submit', function( e, o ){
	      YAHOO.util.Event.stopEvent( e );
	      
	      try {
	        o.fv.validate(
	        {
	          success: function( res ) {
	            if( res.argument.rc ) {
	              res.argument.vc(
	              {
	                frm: res.argument.frm,
	                rc: res.argument.rc
	              } );
	            } else {
	              res.argument.frm.submit();
	            }
	          },
	          failure: function( res ){
	            alert( 'Niet alle velden zijn juist ingevuld.' );
	          },
	          argument: {
	            frm: this
	          }
	        } );
	      }
	      catch( ex ){ }
	    },{ fv: fv } );
  }
  
};
