if( window.jQuery )  // Avoid more errors in IE 5.0
{
  // Directly set flag for CSS to indicate JavaScript is enabled.
  // At this point "HTML" is the only accessable element.
  $(document.documentElement).addClass("jsEnabled");
  $(document).ready( _ip_onDocumentReady );
}

if( window.Shadowbox )
{
  Shadowbox.init( { skipSetup: true                        // automatisch koppelen aan links
                  , useSizzle: false                       // no need to Sizzle, jQuery already offers it
                  , players: ["html"]                      // players to download.
                  , language: document.documentElement.lang
                  , onFinish: _onShadowboxFinish
                  , viewportPadding: 0
                  , displayNav:      false
                  , animate:         false
                  , autoDimensions:  false
                  , adapter:         "base"
                  } );
}


// Alle initialisatie van de pagina moet in deze functie staan.
function _ip_onDocumentReady()
{

  // -------------------------------
  // Fix links

  // Geef links met rel="external" een target="_blank" attribuut.
  $(document.links).filter('[href][rel=external]').each(function() { this.target = '_blank'; });


  // -------------------------------
  // PNG fix

  jQuery.fn.supersleight = function(settings) {
    settings = jQuery.extend({
      imgs: true,
      backgrounds: true,
      shim: 'x.gif',
      apply_positioning: true
    }, settings);
    
    return this.each(function(){
      if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7 && parseInt(jQuery.browser.version, 10) > 4) {
        jQuery(this).find('*').andSelf().each(function(i,obj) {
          var self = jQuery(obj);
          // background pngs
          if (settings.backgrounds && self.css('background-image').match(/\.png/i) !== null) {
            var bg = self.css('background-image');
            var src = bg.substring(5,bg.length-2);
            var mode = (self.css('background-repeat') == 'no-repeat' ? 'crop' : 'scale');
            var styles = {
              'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')",
              'background-image': 'url('+settings.shim+')'
            };
            self.css(styles);
          };
          // image elements
          if (settings.imgs && self.is('img[src$=png]')){
            var styles = {
              'width': self.width() + 'px',
              'height': self.height() + 'px',
              'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + self.attr('src') + "', sizingMethod='scale')"
            };
            self.css(styles).attr('src', settings.shim);
          };
          // apply position to 'active' elements
          if (settings.apply_positioning && self.is('a, input') && (self.css('position') === '' || self.css('position') == 'static')){
            self.css('position', 'relative');
          };
        });
      };
    });
  };
  
  // $(document).pngFix(); 
  $('#footer_stripes, #footer_circles').supersleight({shim: '../resources/img/blank.gif'});


  // --------------------------------
  // Form input label flip

  _sis_bindOverlabelEvents( $(document) );


  // -------------------------------
  // facebook captions

  $('.boxgrid.captionfull').hover(
     function() { $(".cover", this).stop().animate( { top: '100px' }, {queue: false, duration: 160 } ); }
   , function() { $(".cover", this).stop().animate( { top: '160px' }, {queue: false, duration: 160 } ); }
  );


  // -------------------------------
  // mainmenu with delayed mouse out
  
  var timeout       = 500;
  var closetimer    = 0;
  var ddmenuitem    = null;
  
  function jsddm_open()
  {
    jsddm_canceltimer();
    jsddm_close();
    ddmenuitem = $(this).find('ul').eq(0).addClass("slowhover");
  }
  
  function jsddm_close()
  { 
    if(ddmenuitem) ddmenuitem.removeClass("slowhover");
  }
  
  function jsddm_timer()
  { 
    closetimer = setTimeout(jsddm_close, timeout);
  }
  
  function jsddm_canceltimer()
  { 
    if(closetimer)
    {
      window.clearTimeout(closetimer);
      closetimer = 0;
    }
  }
  
  // Bind events
  $('#mainnav > ul > li').hover( jsddm_open, jsddm_timer );
  $(document).click( jsddm_close );


  // --------------------------------
  // Make home height consistent

  // Avoid css hacks, or dependencies on newer CSS code which old browsers don't support.

  //var height01 = document.getElementById('kia');
  //var boxes = $("#kia .colorboxcontent, #world .colorboxcontent, #members .colorboxcontent");
  var boxes = $("#kia .colorboxcontent, #world .colorboxcontent");
  // height of total box in case movie preview is missing
  var highesti = 0;
  //var tboxes = $("#kia, #world, #members");  // totale boxes
  var tboxes = $("#kia, #world");  // totale boxes
  if( tboxes.length > 0 )
  {
    var highest = 0;
    for( var i = 0; i < tboxes.length; i++ )
    {
      var boxHeight = tboxes.eq(i).height();
      highest = Math.max( boxHeight, highest );
      if (boxHeight==highest)
      {
        highesti = i;
      }
    }

    for( var i = 0; i < tboxes.length; i++ )
    {
      //if (i!=highesti)
      {
        var diff = highest - tboxes.eq(i).height();

        if( jQuery.browser.msie && jQuery.browser.version < 7 )
        {
          boxes[i].style.height = boxes.eq(i).height() + diff + "px";
        }
        else
        {
          boxes[i].style.minHeight = boxes.eq(i).height() + diff + "px";
        }
      }
    }
  }


  // --------------------------------
  // FAQ section

  $(".faqsection .faqquestion").click(
    function(e) { 
      var faqitem = $(this);
      var faqanswer = faqitem.next(".faqanswer");

      // close all answers but the current
      $(".answerselected").not(faqanswer).toggle(); 
      $(".answerselected").not(faqanswer).toggleClass("answerselected"); 
      // toggle the current
      faqitem.next(".faqanswer").toggle(); 
      faqitem.next(".faqanswer").toggleClass("answerselected"); 
      return false; 
    }
  );


  // -------------------------------
  // Shadow box manual setup

  var myHTML = "";
  if( window.Shadowbox )
  {
    var links = $(document.links).filter("[rel^=shadowbox]");
    var ajaxLinks    = links.filter("[rel*=player=ajax]");
    var nonAjaxLinks = links.filter(":not([rel*=player=ajax])");

    if( nonAjaxLinks.length )
    {
      Shadowbox.setup( nonAjaxLinks.get() );
    }

    // Workarround voor ontbrekende ajax player voor shadowbox v3
    ajaxLinks.click( function(event)
      {
        event.preventDefault();
        var a = this;
        jQuery.get( a.href + "?ajax=1", function(data)
          {
            Shadowbox.open( { content:    data
                            , player:     "html"
                            , title:      "" //$(a).html()
                            , width:      877
                            , height:     531
                            } );
          }
        );
      }
    );
  }


  // -------------------------------
  // More Ajax stuff

  if( window.sis && sis.ajax )
  {
    ip.ajax._domReady();
  }
}


// Bij het openen van de shadow box
// nog even controleren of er SWF files vervangen moeten worden.
function _onShadowboxFinish(obj)
{
  var bodyEl = $("#" + Shadowbox.contentId() );
  var videoLink = bodyEl.find(".img_video_container > a").get(0);
  if( videoLink )
  {
    // Get the container
    var containerDiv = videoLink.parentNode;
    var embedId = containerDiv.id;
    if( ! embedId )
    {
      embedId = "ajaxEmbedId" + Math.ceil( Math.random() * 10000000 );
      containerDiv.id = embedId
    }

    swfobject.embedSWF( videoLink.href, embedId, containerDiv.offsetWidth, containerDiv.offsetHeight, "8.0.0", "/resources/swf/expressInstall.swf" );
  }
}


function _sis_bindOverlabelEvents( jqContext, directHide )
{
  // Activeer 'overlabels' over compacte formulieren zoals het zoekscherm
  jqContext.find('label.overlabel')
    .each( function()
    {
      // Get field
      var label = $(this);
      var id    = this.htmlFor || this.getAttribute('for');
      var field = null;
      if( ! id || ! (field = document.getElementById( id ) ) ) return;

      // Implement show/hide effect
      $(field).addClass("overlabel-js")                 // for setTimeout() below
              .focus( function() { label.hide(); } )
              .blur ( function() { this.value === '' && label.show(); } );

      // If requested, hide the label directly (e.g. with Ajax updates)
      if( directHide && field.value !== '' )
        label.hide();

      // Also for mouse click
      label.mousedown( function() { field.focus(); } );
    }
  );

  // Hide overlabels after the form is auto-filled in by the browser.
  setTimeout( function()
  {
    var fields = $("input.overlabel-js");
    var labels = $("label.overlabel");
    fields.each( function() { this.value !== '' && labels.filter("[for=" + this.id + "]").hide(); } );
  }, 50 );
}


// -----------------------------
// Ajax handling


if( ! window.ip ) window.ip = {};

ip.ajax =
{
  // Configuration
  settings: { ajaxurl: "/resources/shtml/ajaxhandler.shtml" }
, debug:    ( window.console != null )

  // State
, currentPhoto: 0
, server: null


  // --------------------------------------
  // Unobstrusive JavaScript: bind events.

  /**
   * Called when the DOM is ready
   */
, _domReady: function()
  {
    // Configure sis.ajax component
    var serverUrl = this.settings.ajaxurl;
    this.server = new sis.ajax( this, serverUrl );

    // Make sure events will be rebinded when needed.
    this.server.onReplaceHtml( "newsformbox", this._bindNewsletterFormEvents, true );

    $(document).click( function(event) { ip.ajax._documentClicked( event ); } );
  }


, _bindNewsletterFormEvents: function()
  {
    var form = $("#newsletterform");
    form.submit( function( event ) { event.preventDefault(); ip.ajax.subscribeNewsletter(); } );
    _sis_bindOverlabelEvents( form, true );
  }


  /**
   * Detect if a link is clicked, and pass the call to an action.
   * This avoids continueous event binding.
   */
, _documentClicked: function( event )
  {
    var el = event.target;
    if( el.tagName != "A" )
      return;
    
    var pos = el.href.indexOf("#ip.ajax.");
    if( pos == -1 )
      return;

    // Clicked an hash link.
    event.preventDefault();

    var methodName = el.href.substring( pos + 9 );
    if( this[ methodName ] == null )
    {
      alert("TODO: geen actie voor " + el.href.substring( pos + 1 ) );
      return;
    }

    this[ methodName ]();
  }



  // --------------------------------------
  // Actions to call

  /**
   * Show the next member photo
   */
, showNextPhoto: function()
  {
    this.currentPhoto++;
    this.server.callMethod("showNextPhoto", { photoIndex: this.currentPhoto } );
  }


  /**
   * Subscribe to the newsletter via Ajax.
   */
, subscribeNewsletter: function()
  {
    var postdata = $("#newsletterform").serializeArray();
    this.server.callMethod("subscribeNewsletter", postdata );
  }
}


