// tooltips
var ToolTip = Class.create({
      'id'  : '',

      'options'   : {
        'className' : 'lb-tooltip',
        'duration'  : 0.3,
        'delay'     : 0,
        'effect'    : false,
        'hide'      : false,
        'hideOn'    : 'mouseout',
        'showOn'    : 'mouseover',
        'target'    : false,
        'offset'    : {'x' : 16, 'y' : -35 }
      },
      
      // to make sure the user defined an existing event
      'allowed_events' : [ 'load', 'unload','click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mousemove', 'mouseout', 'focus', 'blur', 'keypress', 'keydown', 'keyup', 'submit', 'reset', 'select', 'change'],

      'initialize' : function($cssRule){

        // get the user defined option
        this.options = Object.extend(this.options, arguments[1] || {});
        
        this.id = escape($cssRule.replace(' ', '_').replace('#', '_'));

        // set the listeners
        $$($cssRule).each(
          function($trigger){

            if( this.allowed_events.indexOf(this.options.showOn) < 0 )
              $trigger.observe('mouseover', this._show_tip.bindAsEventListener(this));
            else
              $trigger.observe(this.options.showOn, this._show_tip.bindAsEventListener(this));


            if( this.allowed_events.indexOf(this.options.hideOn) < 0 )
              $trigger.observe(this.options.hideOn, this._hide_tip.bindAsEventListener(this));
            else
              $trigger.observe('mouseout', this._hide_tip.bindAsEventListener(this));

          }.bind(this)
        );
        
      },
      
      '_show_tip' : function(event){
        event.stop();

        var trigger = event.findElement();        
        var text = trigger.readAttribute('title');
            trigger.oldTitle = trigger.title;
            trigger.title = "";
        
        // create the tooltip html
        var tooltip_id = this.id + '_tip_' + escape(text.replace(' ', '_'));
        
        var pos_left  = this.options.target ? $(this.options.target).positionedOffset().left : trigger.positionedOffset().left;
        var pos_top   = this.options.target ? $(this.options.target).positionedOffset().top : trigger.positionedOffset().top;
            pos_left += this.options.offset.x;
            pos_top += this.options.offset.y;

        var tooltip = new Element('div', { id : tooltip_id  } ).addClassName(this.options.className).update(text).setStyle({display : 'none', left : pos_left + 'px', position : 'absolute', top : pos_top + 'px', zIndex : 10 });
        
        document.body.appendChild(tooltip);
        
        Effect.Appear(tooltip_id, { duration : this.options.duration });

        tooltip = tooltip_id = pos_left = pos_top = text = null;
        
      },

      '_hide_tip' : function(event){
        event.stop();

        var trigger = event.findElement();
        trigger.title = trigger.oldTitle;
        trigger.oldTitle = "";

        var text = trigger.readAttribute('title');

        // create the tooltip html
        var tooltip_id = this.id + '_tip_' + escape(text.replace(' ', '_'));
        
        Effect.Fade(tooltip_id, { duration : this.options.duration });

        setTimeout( function(){ document.body.removeChild($(tooltip_id)) }, (this.options.duration * 1001 ) );

      }
});

// BoxOnOffer.js
var BoxOnOffer = Class.create({
    'handle_over': function () {
      console.log('*');
      var spans = this.select('span.itemBox');
      spans.each(
        function ($target) {
          var has_already = $target.hasClassName('active');
          if (!has_already) {
            $target.addClassName('active');
          }
        }
      );
    },
    'handle_out': function () {
      console.log('**');
      var spans = this.select('span.itemBox.active');
      spans.invoke('removeClassName', 'active');
    },
    'initialize': function ($container) {
      var container = $($container);
      var blocks = container.select('a.item');
      blocks.each(
        function ($target) {
          $target.observe('mouseover', this.handle_over);
          $target.observe('mouseout', this.handle_out);
        }.bind(this)
      );
    }
  }
);

// Client.js
var Client = Class.create(
  ChasteEnvironment, {
    'initialize': function ($super) {
      $super(false, true);
      fire('client:initialized', {});
    }
  }
);

// init.js
observe('dom:loaded', function () {
    var debug = false;
    if (window.location.href.indexOf(':8080') > -1) {
      debug = true;
    }
    Logger.addMethods({'DEBUG': debug});
    var client = new Client();
    
    var tips = new ToolTip('.term-tooltip');
  }
);

