function autoclear(element) {
  $(element).each(function() {
    $(element).bind('focus', function(event) {
      if (!this.clicked) {
        if (!this.defaultTxt)
          this.defaultTxt = $(this).val();
        this.clicked = true;
        $(this).val('');
        $(this).addClass('filled');
      }
    });
    $(element).bind('blur', function(event) {
      if ($(this).val().length == 0) {
        $(this).val(this.defaultTxt);
        this.clicked = false;
        $(this).removeClass('filled');
      }
    });
  });
}

function toggable(element, trigger, toggle) {
  $(element).find(toggle).hide();
  $(element).find('.act').find(toggle).show();
  $(element).find(trigger).css('cursor', 'pointer').click(function(event) {
    $(this).next(toggle).slideToggle(300);
  });
  $(toggle).click(function(event) {
    event.stopPropagation();
  });
}

function sidemenu(element, trigger, toggle) {
  $(element + '>' + trigger + '>' + toggle).hide();
  $(element).find('.act').parent(toggle).show();
  $(element + '>' + trigger).click(function(event) {
    if (!$(this).find('.act').length)
      $(this).children(toggle).slideToggle(300);
  });
  $(element + '>' + trigger + '>' + toggle).click(function(event) {
    event.stopPropagation();
  });
}

function roundabout(element,time) {
  $(element).wrap('<div class="roundabout" />');
  $(element).css('overflow', 'hidden');
  var count = $(element).children('li').length;
  if (count == 0)
    return;
  
  var timer;
  
  while (count < 5) {
    for (i = 0; i < count; ++i) {
      $(element).append($(element).children('li').eq(i).clone());
    }
    count = $(element).children('li').length;
  }

  var n = 0;
  var next = $(element).children('li').eq((n + 1) % count);
  var prev = $(element).children('li').eq((n - 1 + count) % count);
  var act = $(element).children('li').get(n);

  var prev_b = document.createElement('span');
  $(prev_b).addClass('prev');
  $(element).parent().append(prev_b);

  var next_b = document.createElement('span');
  $(next_b).addClass('next');
  $(element).parent().append(next_b);

  $(element).children('li').children('div').hide();

  act.style.display = "list-item";
  
  var magicklock = false;

  function next_el(){
    if(magicklock) return;
    magicklock = true;
    n = (n + 1) % count;
    next = $(element).children('li').get((n + 1) % count);
    prev = $(element).children('li').get((n - 1 + count) % count);
    act = $(element).children('li').get(n);
    changeOpac(act, 0);
    act.style.display = "list-item";
    RunEffect(act, "fadeIn", {speed: 400, callback: function(e){
      magicklock = false;
    }});
    RunEffect(prev, "fadeOut", {speed: 200, callback: function(e){
      e.style.display = "none";
    }});
  }
  
  function prev_el(){
    if(magicklock) return;
    magicklock = true;
    n = (n - 1 + count) % count;
    next = $(element).children('li').get((n + 1) % count);
    prev = $(element).children('li').get((n - 1 + count) % count);
    act = $(element).children('li').get(n);
    changeOpac(act, 0);
    act.style.display = "list-item";
    RunEffect(act, "fadeIn", {speed: 400, callback: function(e){
      magicklock = false;
    }});
    RunEffect(next, "fadeOut", {speed: 200, callback: function(e){
      e.style.display = "none";
    }});
  }

  
  function trigger_click(){
    $(next_b).trigger('click');
  }
  
  $(next_b).click(function() {
    clearTimeout(timer);
    next_el();
    timer=setTimeout(trigger_click, time)
  });

  $(prev_b).click(function() {
    clearTimeout(timer);
    prev_el();
    timer=setTimeout(trigger_click, time)
  });
  
  timer=setTimeout(trigger_click, time);
}

jQuery(document).ready(function($) {
  new autoclear('#top_search input');
  //new sidemenu('#side_menu', 'li > ul > li', 'ul');
});

//WB.effects.js

var Runners = [];

var WhyEffects = {
  Runners: [],
  
  RunEffect: function(el, effect, obj){
    if(!Effects[effect] && typeof(effect) !== "object") return;
    if(typeof(el) !== "object"){
      if(el[0] == "#"){
        if(!(el = document.getElementById(el.substring(1,el.length)))) return;
      }else return;
    }
    if(typeof(obj) !== "object") obj = {};
    if(typeof(effect) !== "object") effect = new Effects[effect]();
    
    el.effect = effect;
    el.effect.el = el;
    this.LoadConf(el.effect,obj,'speed',1000);
    this.LoadConf(el.effect,obj,'f',"square");
    this.LoadConf(el.effect,obj,'callback',null);
    if(typeof(el.effect.conf) === 'object')
      for(var i in el.effect.conf) this.LoadConf(el.effect,obj,i,el.effect.conf[i]);
    el.effect.f = this.DetermineF(el.effect.f);

    if(typeof(el.effect.Pre) === "function") el.effect.Pre();

    el.effect.last = Number(new Date());
    el.effect.start = Number(new Date());
    this.AddRunner(el);
  },
  
  AddRunner: function(el){
    for(var i=0; i<this.Runners.length; i++){
      if(this.Runners[i] === el) this.RemoveRunner(el);
    }
    this.Runners.push(el);
    if(this.Runners.length == 1) requestAnimFrame(this.RunCallback);
  },
  
  RemoveRunner: function(el){
    for(var i=0; i<this.Runners.length; i++){
      if(this.Runners[i] === el){
        this.Runners.splice(i,1);
        break;
      }
    }
  },

  RunCallback: function(){
    WhyEffects.RunEffects();
  },
  
  RunEffects: function(){
    var el;
    var time = Number(new Date()), t, tt;
    for(var i=0;i<this.Runners.length; i++){
      el = this.Runners[i];
      t = time-el.effect.start;
      tt = time-el.effect.last;
      el.effect.ratio = t<el.effect.speed ? Math.min(el.effect.f(t/el.effect.speed), 1) : 1;
      el.effect.Run(t, tt);
      el.effect.last = time;
      this.StopEffect(el, false);
    }
    if(this.Runners.length) requestAnimFrame(this.RunCallback);
  },

  StopEffect: function(el){
    if(el.effect.ratio >= 1){
      var callback;
      this.RemoveRunner(el);
      if(typeof(el.effect.Post) === "function") el.effect.Post();
      if(el.effect.callback) callback = el.effect.callback;
      el.effect = undefined;
      if(typeof(callback) == 'function') callback(el);
    }
  },

  LoadConf: function(el, conf, key, val){
    if(typeof(conf[key]) !== 'undefined') el[key] = conf[key];
    else el[key] = val;
  },
  
  DetermineF: function(f){
    if(typeof(f) == "function") return f;
    
    switch(f){
      case "linear":
        return function(t){ return t };
        break;
      case "smooth":
        return function(r){return 0.5-Math.cos(Math.PI*r)/2;};
        break;
      case "square":
      default:
        return function(t){ return t*t; };
        break;
    }
  }
}

function RunEffect(el, effect, obj){
  WhyEffects.RunEffect(el, effect, obj);
}

function changeOpac(obj,opacity){
  if(!obj || !obj.style) return;
  obj.style.opacity=(opacity/100);
  obj.style.MozOpacity=(opacity/100);
  obj.style.KhtmlOpacity=(opacity/100);
  obj.style.filter="alpha(opacity="+opacity+");";
}

window.requestAnimFrame = (function() {
  return window.requestAnimationFrame ||
         window.webkitRequestAnimationFrame ||
         window.mozRequestAnimationFrame ||
         window.oRequestAnimationFrame ||
         window.msRequestAnimationFrame ||
         function(callback, element) {
           window.setTimeout(callback, 1000/60);
         };
})();

var Effects = {
  "fadeIn": function(){
    this.conf = {"min": 0, "max": 100, "f": "linear"},
    this.Pre = function(){
      if(!this.el.style.opacity) changeOpac(this.el,0);
    },
    this.Run = function(t,tt){
      var opac = Math.round(Math.min(this.el.style.opacity*100+tt*(this.max-this.min)/this.speed,this.max));
      changeOpac(this.el, opac);
    };
  },
  "fadeOut": function(){
    this.conf = {"min": 0, "max": 100, "f": "linear"},
    this.Pre = function(){
      if(!this.el.style.opacity) changeOpac(this.el,100);
    },
    this.Run = function(t,tt){
      var opac = Math.round(Math.max(this.el.style.opacity*100-tt*(this.max-this.min)/this.speed,this.min));
      changeOpac(this.el, opac);
    };
  }
};
