/**
 * Select / Option implementation fot Mootools
 *
 *
 */
Element.implement({
  getSelectedValue: function() {
    if(this.tagName.toLowerCase()!='select')
      return null;
    return $splat(new Elements($A(this.options).filter(function(option) {
      return option.selected;
    })).map(function(opt) {
      return opt.value.clean();
    }));
  },
 
  getSelectedIndex: function() {
    if(this.tagName.toLowerCase()!='select')
      return null;
    return $splat(new Elements($A(this.options).filter(function(option) {
      return option.selected;
    })).map(function(opt) {
      return opt.index;
    }));
  },
 
  getSelectedFull: function() {
    if(this.tagName.toLowerCase()!='select')
      return null;
    return $splat(new Elements($A(this.options).filter(function(option) {
      return option.selected;
    })).map(function(opt) {
      return {
        'index': opt.index,
        'value': opt.value.clean()
      };
    }));
  },
 
  setSelected: function(data, add) {
    if(this.tagName.toLowerCase()!='select')
      return null;
    if(!add)
      this.clearSelect();
    var data = $splat(data);
    Array.each(this.options, function(option, i) {
      if(data.contains(option.getProperty('value')) || data.contains(i))
        option.set('selected', 'selected');
    });
    return;
  },
 
  clearSelect: function(ds) {
    if(this.tagName.toLowerCase()!='select')
      return null;
    var ls = this.getSelectedFull();
    Array.each(this.options, function(option) {
      option.set('selected', (option.defaultSelected && ds) ? 'selected' : '');
    });
    return ls;
  }
});

Element.implement({
  getClassVar: function(sVar){
    var value = null;
    var cl = this.get('class');
    cl.split(" ").each(function(sClass, dxClass) {
      if (sClass.test(sVar)) {
        value = sClass.split(sVar+"-")[1];
      }
    });
    return value;
  }
});


/**
 * Multi-M/IT Class
 *
 *
 */
var MultiM = new Class({
  
  mbInitialized:false,
  moSponsorship:{},
  moMenuDisclaimer:{},
  moMenuContact:{},
  moOverview:{},
  moSponsorshipPage:{},

  moMenu:{},
  moSubmenus:{},
  
  msMenuIndex:"",
  msSubIndex:"",
  
  /**
   * Init
   *
   *
   */
  Init: function() {
    
    
    // Contact
    //this.moMenuContact = new Fx.Slide('contact', {wait:false,transition:Fx.Transitions.Expo.easeOut,duration:600});
    //this.moMenuContact.hide();
    
    //var ss = new SmoothScroll({duration:750}, window);
    
    // Disclaimer
    this.moMenuDisclaimer = new Fx.Slide('disclaimer', {wait:false,transition:Fx.Transitions.Expo.easeOut,duration:600});
    this.moMenuDisclaimer.hide();
    
    // Sponsorship
    this.moSponsorship = new Fx.Slide('sponsorship', {wait:false,transition:Fx.Transitions.Expo.easeInOut,duration:800});
    this.moSponsorship.hide();
    
    // Overview
    this.moOverview = new Fx.Slide('overview', {wait:false,transition:Fx.Transitions.Expo.easeInOut,duration:800});
    
    var o_this = this;
    var o_overview = this.moOverview;
    var o_menu = this.moMenu;
    
    $('overview_title').addEvent('click', function(e) {
      o_overview.toggle();
    });
    
    var i_fps = 45;
    /*
    if(Browser.Engine.trident) {
      i_fps = 25;
    }
    */
    // Main menu
    this.moMenu= new Accordion('div.title', 'div.page', 
    {
      transition: Fx.Transitions.Expo.easeOut,
      duration: 750,
      fps: i_fps,
      show: -1,
      alwaysHide: true,
      opacity:  false,
      onActive: function(toggler, element){
        o_this.msMenuIndex = toggler.getClassVar('page');
        o_this.msSubIndex = '';
        if(o_this.msMenuIndex == '4') {
          o_this.ClearContactForm();
        }
        
        // Toggle ON
        if(toggler.hasClass('title_off'))
          toggler.removeClass('title_off');
              
        toggler.addClass('title_on');
      },
    
      onBackground: function(toggler, element){
        
        if(o_this.msMenuIndex == toggler.getClassVar('page')) {
          o_this.msMenuIndex = "";
        }
        
         // Toggle OFF
        if(toggler.hasClass('title_on'))
          toggler.removeClass('title_on');
              
        toggler.addClass('title_off');
        
        element.setStyle('height', element.offsetHeight);
        
        // Hide all submenu's
        $$('div.subpage').setStyle('height','0');

        if($$('div.subtitle').hasClass('subtitle_off'))
          $$('div.subtitle').removeClass('subtitle_off');
              
        $$('div.subtitle').addClass('subtitle_on');
      }
    }, $('content'));
    
    var o_this = this;    
    
    // Submenu's
    o_this.moSubmenus = new Array();
    
    var a_elements = $('content').getElements('.page');
    a_elements.each(function(oEl, iID) {
      
      var a_subelements = oEl.getElements('.subtitle');
      var o_submenu;
      
      if(a_subelements.length > 0) {
        o_submenu = new Accordion('div.subtitle', 'div.subpage', 
        {
          transition: Fx.Transitions.Expo.easeOut,
          duration: 750,
          fps: i_fps,
          show: -1,
          alwaysHide: true,
          opacity: false,
          onBackground: function(toggler, element){
            if(o_this.msSubIndex == toggler.getClassVar('subpage')) {
              o_this.msSubIndex = "";
            }
        
            element.setStyle('height', element.offsetHeight);
           
            // Toggle OFF
            if(toggler.hasClass('subtitle_on'))
              toggler.removeClass('subtitle_on');
              
            toggler.addClass('subtitle_off');
          },
    
          onActive: function(toggler, element){
            o_this.msSubIndex = toggler.getClassVar('subpage');
            toggler.getParent().setStyle("height", "auto");
   
             // Toggle ON  
            if(toggler.hasClass('subtitle_off'))
              toggler.removeClass('subtitle_off');
              
            toggler.addClass('subtitle_on');
          }
        }, oEl);
      }
      o_this.moSubmenus[iID] = o_submenu;
    });
    
    this.CreateSWFs();
    
    // Set loader for sponsorship mini-site
    $('sponsorship_content').set('load', {method: 'get'});
    var o_loader = $('sponsorship_content').get('load');
    o_loader.addEvent('complete', function(e) {
      $('sponsorship_title').set('html', o_this.moSponsorshipPage.title);
    });
  },
  
  /**
   * Adds all SWF's
   *
   *
   */
  CreateSWFs: function() {
    // Overview SWF
    var oo = new Swiff('/assets/swf/graph.swf', {
      id: 'swf_overview',
      container: $('overview_container'),
      width: 790,
      height: 610,
      wMode: 'opaque'
    });
  },
  
  /**
   * Load a page into an element
   *
   *
   */
   LoadPage: function(sTitle, sUrl) {
      $('sponsorship_content').load(sUrl);
      
      $('sponsorship').removeClass('sponsorship-image');
      
      this.moSponsorshipPage.url = sUrl;
      this.moSponsorshipPage.title = sTitle;
   },

   /**
   * Toggle sponsorship
   *
   *
   */
   CloseSponsorship: function() {
     this.moSponsorship.toggle();
   },

  /**
   * Toggle disclaimer
   *
   *
   */
   ToggleDisclaimer: function() {
     this.moMenuDisclaimer.toggle();
   },

  /**
   * Show contact form
   *
   *
   */
   ShowContact: function(sSubject) {
     this.moSponsorship.slideOut();
     //$('subject').setSelected([sSubject]);
     //var i_pos = $('content').getElements('.title').length;
     this.ShowMainPage(4, 'contact');
     $('subject').set('value', sSubject);
   },
   
  /**
   * Show subscribe form
   *
   *
   */
   Subscribe: function() {
     this.ShowContact('Other');
     $('info').set('value','I would like to subscribe to the Multi-M/IT newsletter.');
     $('newsletter_cb').set('checked', 'checked');
   },
   
  /**
   * Show order form
   *
   *
   */
   OrderKNAS: function() {
     this.ShowContact('Other');
     $('info').set('value','I would like to receive a free copy of the KNAS book.');
     $('newsletter_cb').set('checked', 'checked');
   },
   
  /**
   * Show order form
   *
   *
   */
   ClearContactForm: function() {
     $('naam').set('value', '');
     $('naam').removeClass('invalid');
     $('telefoon').set('value', '');
     $('telefoon').removeClass('invalid');
     $('email').set('value', '');
     $('email').removeClass('invalid');
     $('subject').set('value', '');
     $('info').set('value', '');
     $('info').removeClass('invalid');
     $('newsletter_cb').set('checked', '');
   },
   
  /**
   * Show page
   *
   *
   */
   ShowPage: function(iIndex, sHash) {
     var s_index = "1"+iIndex;
     var o_this = this;
     
     //console.log(s_index == this.msSubIndex);
     
     if(s_index == this.msSubIndex)
       return;
     
     if(this.msMenuIndex != '1') {
       var f_callback = function() {
				 o_this.moSubmenus[1].display(iIndex);
				 window.location.hash = 'anchor'+sHash;
				 o_this.moMenu.removeEvent('complete', f_callback);
				 o_this.msSubIndex = "1"+iIndex;
			 }
       this.moMenu.addEvent('complete', f_callback);
       this.moMenu.display(1);
     } else {
       var f_callback = function() {
				 window.location.hash = 'anchor'+sHash;
				 o_this.moSubmenus[1].removeEvent('complete', f_callback);
			 }
			 o_this.moSubmenus[1].addEvent('complete', f_callback);
       o_this.moSubmenus[1].display(iIndex);
       o_this.msSubIndex = "1"+iIndex;
     }

   },
   
  /**
   * Show page
   *
   *
   */
   ShowMainPage: function(iIndex, sHash) {
     //window.location.hash = sHash;
     if(iIndex == this.msMenuIndex)
       return;
     
     var o_this = this;
     var f_callback = function() {
		   window.location.hash = sHash;
			 o_this.moMenu.removeEvent('complete', f_callback);
     }
     this.moMenu.addEvent('complete', f_callback);
       
     this.moMenu.display(iIndex);  
     this.msMenuIndex = iIndex;
   },
   

  /**
   * Validate form
   *
   *
   */
   ValidateContact: function() {
      var o_fv = new FormValidator($('form'));
      if($('telefoon').get('value') == '123456') {
        $('telefoon').addClass('invalid');
        return;
      }

      if($('human').get('value')!="") {
        return;
      }
       
      o_fv.validate(function(sType, oEl) {}, function() {
          $$('form')[0].submit();
      });
   }
   
});

/**
 * Adds event listeners
 *
 *
 */
function AddListeners() {
  $('sponsorship_btn').addEvent('click', function(e) {
    o_multim.moSponsorship.toggle();
  });
  
 
  $('newsletter_btn').addEvent('click', function(e) {
    //o_multim.Subscribe();
    
    document.location.href = "/";
  });

  $$('.title').addEvent('mouseenter', function(e) {
    var o_event = new Event(e);
    var o_target = $(o_event.target);
    o_target.addClass('title_hover');
  });
  
  $$('.title').addEvent('mouseleave', function(e) {
    var o_event = new Event(e);
    var o_target = $(o_event.target);
    if(o_target.hasClass('title_hover'))
      o_target.removeClass('title_hover');
  
  });
  
  $$('.subtitle').addEvent('mouseenter', function(e) {
    var o_event = new Event(e);
    var o_target = $(o_event.target);
    o_target.addClass('subtitle_hover');
  });
  
  $$('.subtitle').addEvent('mouseleave', function(e) {
    var o_event = new Event(e);
    var o_target = $(o_event.target);
    if(o_target.hasClass('subtitle_hover'))
      o_target.removeClass('subtitle_hover');
  
  });
  
  
}

// Create Class instance
var o_multim = new MultiM();

/**
 * DOM Ready callback
 *
 *
 */
window.addEvent('domready', function(oEvent){
  // Initialize the instance
  o_multim.Init();
  
  // Add event listeners
  AddListeners();
  
  o_multim.mbInitialized = true;
});
