// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

Element.addMethods({
  fadeIn: function(element) {
    if (element.visible()) return;
    
    element.setOriginal('opacity', element.getStyle('opacity'));
    
    var effect = new Fx.Style(element, 'opacity', {
      onComplete: function() {
        element.setStyle('display:block; opacity:' + element.originalOpacity);
      },
      duration: 100
    });
    effect.set(0);
    effect.custom(0, element.originalOpacity);
  },
  
  fadeOut: function(element) {
    if (!element.visible()) return;
    
    element.setOriginal('opacity', element.getStyle('opacity'));
    
    var effect = new Fx.Style(element, 'opacity', {
      onComplete: function() {
        element.setStyle('display:none; opacity:' + element.originalOpacity);
      },
      duration: 100
    });
    effect.set(element.originalOpacity);
    effect.custom(element.originalOpacity, 0);
  },
  
  // Rotate elements, in the format of element.rotate({from: angle1, to: angle2})
  rotate: function(element, options) {
    var from = options.from || 0,
        to = options.to;
    
    var interval = setInterval(function() {
      if (from < to) {
        from += 3
        if (from >= to) clearInterval(interval);
      } else {
        from -= 3
        if (from <= to) clearInterval(interval);
      }
      element.setStyle('-moz-transform:rotate(' + from + 'deg); -webkit-transform:rotate(' + from + 'deg)');
    }, 10)
  },
  
  setRotate: function(element, angle) {
    element.setStyle('-moz-transform:rotate(' + angle + 'deg); -webkit-transform:rotate(' + angle + 'deg)');
  },
  
  // Show elements in a smooth fashion
  slideDown: function(element, options) {
    if (element.visible()) return;
    
    options = options || {};
    element.setOriginal('height', element.getHeight());
    element.setOriginal('overflow', element.getStyle('overflow'));
    
    var effect = new Fx.Style(element, 'height', {
      duration: 500 + (element.originalHeight / 6),
      onStart: function() {
        element.setStyle('height:0px; display:block; overflow:hidden');
        if (options.onStart) options.onStart();
      },
      onComplete: function() {
        element.setStyle('overflow:' + element.originalOverflow);
        if (options.onComplete) options.onComplete();
      }
    });
    effect.set(0);
    effect.custom(0, element.originalHeight);
  },
  
  slideToggle: function(element, options) {
    if (element.visible()) element.slideUp(options);
    else element.slideDown(options);
  },
  
  // Hide elements in a smooth fashion
  slideUp: function(element, options) {
    if (!element.visible()) return;
    
    options = options || {};
    element.setOriginal('height', element.getHeight());
    element.setOriginal('overflow', element.getStyle('overflow'));
    
    var effect = new Fx.Style(element, 'height', {
      duration: 500 + (element.originalHeight / 6),
      onStart: function() {
        element.setStyle('overflow:hidden');
        if (options.onStart) options.onStart();
      },
      onComplete: function() {
        element.setStyle('display:none; overflow:' + element.originalOverflow);
        if (options.onComplete) options.onComplete();
      }
    });
    effect.set(element.originalHeight);
    effect.custom(element.originalHeight, 0);
  },
  
  setOriginal: function(element, property, value) {
    if (!element['original' + property.capitalize()]) element['original' + property.capitalize()] = value;
  }
})

var Timezone = {
  set : function() {
    var date = new Date();
    var timezone = "timezone=" + -date.getTimezoneOffset() * 60;
    date.setTime(date.getTime() + (1000*24*60*60*1000));
    var expires = "; expires=" + date.toGMTString();
    document.cookie = timezone + expires + "; path=/";
  }
}
Event.observe(document, 'dom:loaded', function() { Timezone.set() });