/**
 * @fileOverview A collection of classes and functions for this project.
 * @name Project name
 * @author Tobias Kreß, kress@kupferwerk.com
 * @version 1.0
 */



/**
 * @class Description for this application class
*/
var Ramsauer = Class.create(KWStandard, {
  /**
   * @constructor
   */
  initialize: function() {
    document.observe('dom:loaded', function() {
      this.initDropDowns();
      this.initFontResizing();
      this.html5Check();
    }.bind(this));
  },
  
  html5Check: function() {
    if (BrowserDetect.version == 2 && BrowserDetect.browser == 'Firefox') {
      template = '<div id="html5invalid"><div>';
      template+= '<p>Diese Seite wird nicht von Ihrem Browser unterstützt. Sie verwenden eine veralteten Browser (Firefox 2) mit Sicherheitsschwachstellen. Wir empfehlen Ihnen Ihren Browser zu <a href="http://www.mozilla.com/firefox/">aktualisieren</a>.</p>';
      template+= '<a class="close" href="#"><img src="/images/browsercheck/cancel_16.png" /></a>';
      template+= '</div></div>';
      $$('body').first().insert({'top': template});
      $('html5invalid').down('a.close').observe('click', function(e) {
        Event.stop(e);
        $('html5invalid').remove();
      });
    };
  },
  
  /**
   * Inits the mouseover and mouse out observer to show and hide the dropdown menues
   * 
   * @return false
  */
  initDropDowns: function() {
    var drop_lis = $$('.with_dropdown');
    drop_lis.each(function(li){
      li.observe('mouseover', function(e){
        li.down('nav').show();
      });
      li.observe('mouseout', function(e){
        li.down('nav').hide();
      });
    });
    
    return false;
  },
  
  /**
   * Inits the font resizing observers on the buttons
   * 
   * @return false
  */
  initFontResizing: function() {
    //Checks if there is a fontsize cooke set
    if (size = this.checkFontSizeCookie()) {
      $$('body').first().setStyle({fontSize: size + 'px'});
    };
    
    //Starting observers
    $('increase_font_size').observe('click', function(e) {
      Event.stop(e);
      this.increaseFontSize();
    }.bind(this));
    $('decrease_font_size').observe('click', function(e) {
      Event.stop(e);
      this.decreaseFontSize();
    }.bind(this));
    $('default_font_size').observe('click', function(e) {
      Event.stop(e);
      $$('body').first().setStyle({fontSize: '10px'});
      this.setFontSizeCookie(10);
    }.bind(this));
  },

  checkFontSizeCookie: function() {
    name = 'fontSize';
    var cookies = document.cookie;
    if (cookies.indexOf(name) != -1) {
      var startpos = cookies.indexOf(name)+name.length+1;
      var endpos = cookies.indexOf(";",startpos); //- 1      
      if (endpos == -1) endpos = cookies.length;
      return unescape(cookies.substring(startpos,endpos));
    } else {
      return false; // the cookie couldn't be found! it was never set before, or it expired.
    }
  },
  
  setFontSizeCookie: function(size) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate()+100);
    document.cookie = 'fontSize' + "=" + escape(size) + ";expires=" + exdate.toGMTString() + ";path=/;";
  },
  
  increaseFontSize: function() {
    var body = $$('body').first();
    var cur_size = body.getStyle('fontSize').gsub('px', '');
    if (cur_size < 12) {
      new_size = parseInt(cur_size, 10) + 1;
      body.setStyle({fontSize: (new_size + 'px') });
      this.setFontSizeCookie(new_size);
    }
  },
  
  decreaseFontSize: function() {
    var body = $$('body').first();
    var cur_size = body.getStyle('fontSize').gsub('px', '');
    if (cur_size > 8) {
      new_size = parseInt(cur_size, 10) - 1;
      body.setStyle({fontSize: (new_size + 'px') });
      this.setFontSizeCookie(new_size);
    }
  },
  
  /**
   * Inits detail toggling for event list
   * 
   * @return false
  */
  initEventList: function() {
    var toggle_links = $$('.toggle_detail');
    var default_text = toggle_links.first().innerHTML;
    toggle_links.each(function(link) {
      link.observe('click', function(e) {
        Event.stop(e);
        toggle_div = link.next('.event_detail');
        if (!link.hasClassName('is_animating')) {
          if (toggle_div.getStyle('display') == 'none') {
            Effect.BlindDown(toggle_div, { 
                                          duration: 0.5, 
                                          beforeStart: function(){
                                            link.addClassName('is_animating');
                                            link.addClassName('opened_detail');
                                          },
                                          afterFinish: function(){
                                            link.update('schließen');
                                            link.removeClassName('is_animating');
                                          }
                                          });
          } else {
            Effect.BlindUp(toggle_div, { 
                                        duration: 0.5, 
                                        beforeStart: function(){
                                          link.addClassName('is_animating');
                                          link.removeClassName('opened_detail');
                                        },
                                        afterFinish: function(){
                                          link.update(default_text);
                                          link.removeClassName('is_animating');
                                        }
                                        });
          }
        };
      });
    });
  },
  
  
  /**
   * Inits news switching
   * 
  */
  
  initSwitchNews: function() {
    var instance = this;
    $$('.top_article_link').each(function(link) {
      link.observe('click', function(e) {
        Event.stop(e);
        return instance.switchNews(link);
      });
    }).first().addClassName('active');

    
    this.hideTopArticles().first().show();
    new PeriodicalExecuter(function() {
      instance.startSlide();
    }, 30);
            
    return false;
  },
  
  deactivateTopArticleLinks: function(links) {
    return $$('.top_article_link').invoke('removeClassName', 'active');
  },
  
  hideTopArticles: function() {
    return $$('.top_article').invoke('hide');
  },
  
	switchNews: function(trigger) {
	  this.deactivateTopArticleLinks();
	  trigger.addClassName('active');
	  
	  this.hideTopArticles();
	  $(trigger.id.gsub('_link', '')).show();
	  
	  return false;
	},
	
	startSlide: function() {
	  trigger = $$('.top_article_link.active').first().nextSiblings().first();
    if(!trigger)
      trigger = $$('.top_article_link').first();
	  this.switchNews(trigger);
	},
	
	saveSubscription: function(form) {
	  new Ajax.Request('/newsletter-eintragen', {
	    parameters: form.serialize(true),
	    onComplete: function(request) {
	    },
	    onSuccess: function(request) {
	      $('newsletter_error').hide();
	      $('newsletter_success').update(request.responseText).show();
	      $('newsletter_form').select('input[type="text"]').invoke('clear');
	    },
	    onFailure: function(request) {
	      $('newsletter_success').hide();
	      $('newsletter_error').update(request.responseText).show();
	    }
	  });
	  
	  return false;
	},
	
	sendMail: function(form) {
	  new Ajax.Request('/mail-verschicken', {
	    parameters: form.serialize(true),
	    onComplete: function(request) {
	    },
	    onSuccess: function(request) {
	      $('mail_error').hide();
	      $('mail_success').update(request.responseText).show();
	      $('contact_form').select('input[type="text"]', 'textarea').invoke('clear');
	    },
	    onFailure: function(request) {
	      $('mail_success').hide();
	      $('mail_error').update(request.responseText).show();
	    }
	  });
	  
	  return false;
	}
  
});
var ramsauer = new Ramsauer();