﻿var jump_text = function() {
  var me = $(this);
  if (!me.attr("rel")) return false;
  var text = me.html();
  var ruler = $("<span class='ruler'></span>");
  var letter, span;
  text = text.replace(/^\s+|\s+$/g,'').split('');
  me.append(ruler);
  var text2 = $(text).map(function() {
    if(this == ' ') letter = '&nbsp;'
    else letter = this;
    var span = $("<span class='letter'>" + (letter == '&nbsp;' ? '' : letter) + "</span>");
    span.css('left', ruler.width());
    ruler.html(ruler.html() + letter);
    me.append(span)
    return span;
  })
  
  ruler.remove();
  me.data('letters',text2);
  me.hover(animate_letter, stop_letters);
  me.click(function() {
    location.href = me.attr('href');
  })
}

var animate_letter = function(me) {
  if(me.originalEvent){
    me = $(this);
    me.data('hovered',true)
  }else{
    if(me.data('hovered') == false) return false;
  }
  if(me.hasClass("animating")){
    if (animate_letter.timeout) return false;
    animate_letter.timeout = setTimeout(function(){animate_letter(me)}, animate_letter.stopping_time - new Date().getTime());
    return false;    
  }else{
    if (animate_letter.timeout) animate_letter.timeout = null;
  }
  me.addClass("animating");
  me.data('frame', 0);
  
  var fn = fn3;
  if(me.attr('rel')){
    try{
      fn = eval(me.attr('rel'));
    }catch(e){
      fn = fn2;
    }
  }
  
  if (me.data('timer')) clearInterval(me.data('timer'));
  
  var timer = setInterval(function() {
    animate_letter_step(me, fn);
  },40);
  me.data('timer', timer);
}

//colors = ["#629c28", "#4f9c28", "#3c9c28", "#289c28", "#289c3c", "#289c4f", "#289c62", "#289c75", "#289c88", "#289c9c", "#28889c", "#28759c", "#28629c", "#284f9c", "#283c9c", "#28289c", "#3c289c"];
var colors = ["#629c28", "#4f9c28", "#3c9c28", "#289c28", "#289c3c", "#289c4f", "#289c62", "#289c75", "#289c88", "#289c9c", "#28889c", "#28759c", "#28629c", "#284f9c", "#283c9c", "#28289c", "#3c289c", "#28289c", "#283c9c", "#284f9c", "#28629c", "#28759c", "#28889c", "#289c9c", "#289c88", "#289c75", "#289c62", "#289c4f", "#289c3c", "#289c28", "#3c9c28", "#4f9c28"];
var colors2 = [[98, 156, 40], [215, 161, 32], [255, 2, 2]]

fn1 = function(f,i, span) {
  // f =  f + 2
  // if(f == 2){
  //   fn1.f = 0; fn1.d = -1;
  // }
  // if(fn1.f < f - 2){
  //   fn1.d *= -1;
  //   fn1.f = f;
  // }
  var x = parseFloat(span.css('top')) - Math.random() * (f % 12 > 1 ? -0.25 : 1);
  return Math.max(-2,Math.min(0,x)) + 'em';  
}

// if ($.browser.opera){
//   fn1 = function(f,i, span) {
//     var x = parseFloat(span.css('top')) - Math.random() * (f % 12 > 1 ? -0.25 : 1);
//     return Math.max(-1,Math.min(0,x)) + 'em';  
//   }
// }

fn2 = function(f,i){
  return Math.round(-0.5 * Math.min(1,f*0.3/10) *  Math.sin((f*0.3+i) * Math.PI / 6)/Math.sqrt((i+1)/5) * 10000) / 10000 + 'em';
};

fn3 = function(f,i) {
  // return ((Math.random()-f-i-3)%4)/3 + 'em'
};

fn2.color = function(f,i,span) {
  return colors[Math.round(colors.length + f - i) % colors.length];
  // return colors[Math.floor(parseFloat(span.css('top'))/-2 * (colors.length - 1)) % colors.length];
}

var avg_at = function(a,b,f){
  if (a > b)
    return Math.round(a - (a-b) * f);
  else
    return Math.round(a + (b-a) * f);
}

fn1.color = function(f,i,span) {
  var h = parseFloat(span.css('top'))*-1; //[0;2]
  var c1 = colors2[0];
  var c2 = colors2[1];
  if (h > 1){ c1 = c2; c2 = colors2[2]; h -= 1; }
  return 'rgb(' + avg_at(c1[0], c2[0], h) + ',' + avg_at(c1[1],c2[1], h) + ',' + avg_at(c1[2],c2[2], h) + ')';
}

// fn2.color = function(f,i,span) {
  // return colors[(f+i) % colors.length];
  // return colors[Math.floor(parseFloat(span.css('top'))/-2 * (colors.length - 1)) % colors.length];
// };

var animate_letter_step = function(me, fn){
  if (me.data('disabled')) return false;
  var letters = me.data('letters');
  var frame = me.data('frame');
  var span;
  animate_letter.locked = true;
  letters.each(function(i) {
    span = $(this);
    span.css('top', fn(frame, i, span));
    span.css('color',fn.color ? fn.color(frame, i, span) : colors[Math.round((frame+i)*10) % colors.length]);
  })
  frame += 1;
  me.data('frame',frame);
}

var stop_letters = function(){
  var me = $(this);
  if (me.data('disabled')) return false;
  me.data('hovered',false);
  clearInterval(me.data('timer'));
  animate_letter.stopping_time = new Date().getTime() + 700;
  me.find(".letter").animate({top:0}, 500, function() {
    me.removeClass("animating");
  })
}

var detect_active_menu = function(){
  var me = $("#menu .cell2 a.active");
  if (me.size() > 0){
    var fn = fn3;
    if(me.attr('rel')){ try{fn = eval(me.attr('rel'));}catch(e){fn = fn2;}}
    animate_letter(me);
    clearInterval(me.data('timer'));
    for (var i = 0; i < 40; i++){
      animate_letter_step(me, fn);
    }
    me.data("disabled", "1");
  }
}

$(function() {
  $("#menu a").each(jump_text);
  
  detect_active_menu();  
  
  if ($.browser.opera) $("body").addClass("opera");
  
  var span = $("<span>");  
})

document.onkeydown = function(event){
	if (window.event) event = window.event;

	if (event.ctrlKey)
	{
		var link = null;
		var href = null;
		switch (event.keyCode ? event.keyCode : event.which ? event.which : null)
		{
			case 0x25:
				link = document.getElementById('PrevLink');
				break;
			case 0x27:
				link = document.getElementById('NextLink');
				break;
		}

		if (link && link.href) document.location = link.href;
	}			
}

$(document).ready(function()
{
	  // init search
  var search_field = $("#search .field");
  search_field.blur(function(){
    if(!search_field.val()){ search_field.val("Поиск"); search_field.removeClass("active"); }
  }).focus(function(){
    if(search_field.val() == "Поиск"){ search_field.val(""); search_field.addClass("active"); }
  })
  $("#search form").submit(function() {
    if(search_field.val() == "" || search_field.val() == "Поиск") return false;
  })
})