/**
 * ############################################################
 * ##       Project:    ZZP Verzekeraar i.s.m.               ##
 * ##                   Kendall Mason                        ##
 * ##       File:       clientscript/fader.js                ##
 * ##       Date:       11-03-2008                           ##
 * ## ------------------------------------------------------ ##
 * ## Fader functies                                         ##
 * ## ------------------------------------------------------ ##
 * ############################################################
 * ############################################################
 * ##     Author:       Chris Blokland                       ##
 * ##     In opdracht:  Kendall Mason                        ##
 * ##     Copyright:    dtpXpress / SixSenses                ##
 * ############################################################         
 */

var Faders      = new Array();

function AddFader( id, container )
{
  
  if( !Faders[id] )
  {
    Faders[id] = new Fader( id );
    Faders[id].setFaderObject(container);

  }
  return Faders[id];
}
// Browser herkennen
var userAgent = navigator.userAgent.toLowerCase();
var is_opera  = (userAgent.indexOf('opera') != -1);
var is_saf    = ((userAgent.indexOf('applewebkit') != -1) || (navigator.vendor == 'Apple Computer, Inc.'));
var is_webtv  = (userAgent.indexOf('webtv') != -1);
var is_ie     = ((userAgent.indexOf('msie') != -1) && (!is_opera) && (!is_saf) && (!is_webtv));

function Fader( control_id )
{
  
  // Fade instellingen
  this.current_oppacity    = 1;
  this.step_size           = 10;
  this.fade_speed          = 40; // 5 stappen( 5*20=100 ), halve seconde=30s=300ms 300ms / 20 = 15
  this.control_id          = control_id;
  this.fader               = null;
  this.mode                = 'fadein';
  this.onComplete          = '';
  
  var me                   = this;
  
  this.setOnComplete = function( callback_func )
  {
    me.onComplete = callback_func;
  }
  
  this.setFaderObject = function( fader )
  {
    
    if( !fader )
    {
      alert( 'Geef fader op!' );
    }else {
      if( typeof( fader ) != 'object' )
      {
        fader_temp = document.getElementById( fader );
        
        if( !fader_temp )
        {
          alert( "Fade object: "+fader+" kan niet gevonden worden in het document!" );
        } else {
          me.fader = fader_temp;
        }
      } else {
        me.fader = fader;
      }
    } // end if        
    
    me.InitFadeObject();
    
  } // end function Fader::setFader
  
  this.setMode    = function( mode )
  {
    me.mode   = mode;
  }
  
  this.InitFadeObject   = function()
  {
    me.fader.onclick          = FaderEvents.prototype.click;
    me.fader.style.display    = 'block';
    
  }

   
  
  this.doFade        = function()
  {
    var debug_data =  "Mode: "+me.mode +"<br />current_oppacity: "+me.current_oppacity;
    
    //alert( me.current_oppacity );
    
    if( me.fader )
    {            
      if( is_ie )
      {
        
        if( me.mode == 'fadeout' )
        {
          
          if( me.current_oppacity > 0 && me.fader.style.display != 'none')
          {
            
            me.current_oppacity  = (me.current_oppacity - me.step_size );
            
            me.fader.style.filter  = "alpha(opacity="+me.current_oppacity+")";
            
            // Nog een keer faden
            window.setTimeout('Faders["'+me.control_id+'"].doFade()', me.fade_speed );
            
          } else {
            me.doCallBackComplete();
          }
        } else {
          
            if( me.current_oppacity < 100 )
            {
              
              me.current_oppacity  = (me.current_oppacity + me.step_size );
              
              me.fader.style.filter  = "alpha(opacity="+me.current_oppacity+")";
              
              // Nog een keer faden
              window.setTimeout('Faders["'+me.control_id+'"].doFade()', me.fade_speed );
              
            } else {
              me.doCallBackComplete();
            }          
          }
        
      } else if ( is_saf ) {
        
        //setDebug( "Debug Safari..<br />Oppacity: "+me.current_oppacity );
        
        if( me.mode == 'fadeout' )
        {
          if( me.current_oppacity > 0 && me.fader.style.display != 'none' )
          {
            
            me.current_oppacity  = (me.current_oppacity - (me.step_size/100) );
            
            me.fader.style.opacity = me.current_oppacity;
            
            // Nog een keer faden
            window.setTimeout('Faders["'+me.control_id+'"].doFade()', me.fade_speed );
            
          } else {
            me.doCallBackComplete();
          }
        } else {
          if( me.current_oppacity < 1 )
          {
            
            me.current_oppacity  = (me.current_oppacity + (me.step_size/100) );
            
            me.fader.style.opacity = me.current_oppacity;
            
            // Nog een keer faden
            window.setTimeout('Faders["'+me.control_id+'"].doFade()', me.fade_speed );
            
          } else {
            me.doCallBackComplete();
          }         
        }
        
      } else {
                
        if( me.mode == 'fadeout' )
        {
          if( me.current_oppacity > 0 && me.fader.style.display != 'none')
          {
            
            me.current_oppacity  = (me.current_oppacity - (me.step_size/100) );
            
            me.fader.style.MozOpacity = me.current_oppacity;
            
            // Nog een keer faden
            window.setTimeout( 'Faders["'+me.control_id+'"].doFade();', me.fade_speed );
            
          } else {
            me.doCallBackComplete();
          }
          
        } else {
          
          if( me.current_oppacity < 1 )
          {
            
            me.current_oppacity  = (me.current_oppacity + (me.step_size/100) );
            
            me.fader.style.MozOpacity = me.current_oppacity;
            
            // Nog een keer faden
            window.setTimeout( 'Faders["'+me.control_id+'"].doFade();', me.fade_speed );
            
          } else {
            me.doCallBackComplete();
          }
          
          // fadein
          //me.fader.style.display = 'block';
          //me.fader.style.MozOpacity = 1; //me.current_oppacity;
          
          //me.current_oppacity = 1;
          
        } // end if mode check
      } // end if browser check   
    } // end if div check 
    
    debug_data +=  "<br /><hr/><br/>Mode: "+me.mode +"<br />current_oppacity: "+me.current_oppacity;
    
    me.fader.style.display = 'block';
    //setDebug( debug_data );
  } // end function Fader::doFade
  
  this.doCallBackComplete = function()
  {
    if( this.onComplete != '' )
    {
      window.setTimeout( this.onComplete, 1 );
    }
  }
  
} // end class Fader

function FaderEvents()
{
}


FaderEvents.prototype.click   = function(e)
{
  this.style.display = 'none';  
}