var ping = 0;
var req = null


function refresh_session()
{
  req.send();
}

window.addEvent('domready', function()
{


  if (ping == 1)
  {
    req = new Request({url: site_base+'/resources/scripts/ping.php', method: 'get'});
    refresh_session.periodical(300000); // refresh every 5 minutes
  }


  if ($('sfcontainer'))
  {
    var containercss = "#sfcontainer .sfeature";

    check_features(containercss);

    $$(containercss).each(function(container)
    {
      // check on load which features should be toggled
      var cb = container.getElement(".fcheck");
      var icon = container.getElement(".ficon");

      cb.addEvent('click', function(e)
      {
        check_features(containercss);
      });

      icon.addEvent('click', function(e)
      {
        cb.set('checked', (cb.get('checked') == false? true : false));
        check_features(containercss);
      });


    });

  }


  if ($('toggle_features'))
  {
    var containercss = "#toggle_features .feature";

    check_features(containercss);

    $$(containercss).each(function(container)
    {
      // check on load which features should be toggled
      var cb = container.getElement("input[type=checkbox]");
      var icon = container.getElement(".ficon");

      cb.addEvent('click', function(e)
      {
        check_features(containercss);
      });

      icon.addEvent('click', function(e)
      {
        cb.set('checked', (cb.get('checked') == false? true : false));
        check_features(containercss);
      });


    });

  }


});


function check_features(containercss)
{
  $$(containercss).each(function(container)
  {
    if (container.getElement("input[type=checkbox]").get('checked') == true)
    {
      container.getElement("div.ficon").addClass('active');
    }
    else
    {
      container.getElement("div.ficon").removeClass('active');
    }
  });
}



function toggle_features()
{
  /*
  $$(".ficon").each(function(el)
  {
      el.addEvents({
        'mouseenter': function(){
          el.addClass('jump');
        },
        'mouseleave': function(){
          el.removeClass('jump');
        }
      });

  });
  */

  $$("#toggle_features .feature_container").each(function(container)
  {
    container.getElements('table tr.feature').each(function(row)
    {
      var active = true;
      row.getElements('input').each(function(element)
      {
        if (active == false)
        {
          // no break; inside `each`?
          return;
        }

        if (element.get('type') == 'checkbox')
        {
          if (element.get('checked') == false)
          {
            active = false;
          }
        }
        /*
        else
        {
          // assume it's a textfield
          if (element.get('value') == '')
          {
            active = false;
          }
        }
        */
      });

      if (active == true)
      {
        $(row.get('id')+'_icon').addClass('active');
      }
      else
      {
        $(row.get('id')+'_icon').removeClass('active');
      }

    });

  });
}

window.addEvent('load', function() {
  var myInfoBoxes = new InfoIcon($$('.infotxt'));
});


var InfoIcon = new Class({
  initialize: function(elements)
  {
    this.boxname = ['infobox','infoboxhead'];
    this.infobox = new Element('div', {
      'class': this.boxname[0],
      'styles': {
        'position': 'absolute'
       ,'top': '0'
       ,'left': '0'
       ,'height': '0'
       ,'overflow': 'hidden'
      }
    }).inject(document.body);
    this.infotitle = new Element('div',{'class':'infoboxtitle'}).inject(this.infobox);
    this.infodata  = new Element('div',{'class':'infoboxdata'}).inject(this.infobox);

    this.slider = new Fx.Tween($(this.infobox),'height');
    this.slider.options.duration = 250; //ugly fix to set the duration..
    $$(elements).each(this.build, this);
  },

  build: function(el)
  {
    switch(el.tagName.toLowerCase())
    {
      case 'img':
        el.txt = el.alt.replace(/\n/g,'<br />');
        el.removeAttribute('alt');
      break;
      default:
        if((frstel=el.getFirst()) && frstel.className=='infotxtdata')
        {
          el.txttitle = el.title.replace(/\n/g,'<br />');
          el.removeAttribute('title');
          el.txt = frstel.get('html');
        }
        else
        {
          el.txt = el.title.replace(/\n/g,'<br />');
          el.removeAttribute('title');
        }
      break;
    }
    el.addEvent('mouseenter', function(event){
      this.infobox.className = this.boxname[el.txttitle?1:0];
      this.position(el);
      this.start(el);
    }.bind(this));
    var end = this.end.bind(this);
    el.addEvent('mouseleave', end);
    el.addEvent('trash', end);
  },

  start: function(el)
  {
    this.infotitle.empty();
    this.infotitle.set('html',el.txttitle);
    this.infodata.empty();
    this.infodata.set('html',el.txt);
    $clear(this.timer);
    this.timer = this.show();
  },

  end: function(event)
  {
    $clear(this.timer);
    this.timer = this.hide();
  },

  position: function(element)
  {
    var pos    = element.getPosition();
    var dynw   = element.offsetWidth;
    var dynh   = element.offsetHeight;
    var winx   = window.getWidth()-50;
    var infow  = this.infobox.offsetWidth;
    var alignr = (pos.x+infow>winx)? true : false;
    this.infobox.setStyles({
       'left': pos.x-Math.floor(alignr? (infow-(dynw/2+12)) : (13 - dynw/2))
      ,'top': pos.y+dynh
      ,'background-position': (alignr?'-250px 0px':'0px 0px')
    });
  },

  show: function()
  {
    this.slider.cancel();
    this.slider.set('height',0);
    this.slider.start('height',0,this.infobox.scrollHeight);
  },

  hide: function()
  {
    this.slider.cancel();
    this.slider.start('height',this.infobox.scrollHeight,0);
  }

});

var RoundedCorners = new Class({
  initialize: function(elements)
  {
    $$(elements).each(this.build, this);
  },
  build: function(el)
  {
    var roundw = 7;

    var elHtml = el.get('html');
        el.set('html','');
    var container = new Element('div',{'class':'roundcontainer'}).inject(el);
        container.set('html',elHtml);
    new Element('div', {'class': 'corner'}).inject(new Element('div', {'class': 'roundtop'}).inject(el,'top'));
    new Element('div', {'class': 'corner'}).inject(new Element('div', {'class': 'roundbottom'}).inject(el,'bottom'));

    var padd = el.getStyle('padding').split(' ');
    el.setStyle('padding','0px');


    container.setStyles({'padding-top':parseInt(padd[0])-roundw+'px'
                        ,'padding-right':padd[1]
                        ,'padding-bottom':'0px'
                        ,'padding-left':padd[3]});
  }
});

