/*======== Настройки =========*/
var max_discount = 10;  // максимальная скидка
var min_discount = 0;   // минимальная скидка
var change_time = 700;  // время «прыганья» цифр
var fall_time = 1200;   // время «падения»
var change_speed = 50;  // скорость смены цифр, время между каждой сменой
var messages = {        // cообщения, выбирается случайное
  'positive': [         // если текущее значение на которое изменяется скидка положительное
    'Мы вас балуем',
    'Жми еще, удача впереди!',
    'Много? И это еще не предел',
    'Удача преследует вас'
  ],
  'negative': [        // если текущее значение на которое изменяется скидка отрицательное
    'Не отчаивайтесь, все еще впереди',
    'Еще один раз, все получится',
    'Утешительный приз всё равно будет'
  ]
}

/*======== Служебные счетчики =========*/
var rand = false;
var set;
var attent;

/*======== Хранение временных значений =========*/
var step;
var now;
var now1;
var prev;
var add1;
var clickable = true;

function set_random() { // возвращает от -2 до 3
  jQuery('#sign-a').show();
  add = Math.round(Math.random()*50 - 20)/10; 
  add1 = add;
  if (add > 0) {
    jQuery('#sign-a').html('+');
  } else {
    jQuery('#sign-a').html('&minus;');
  }
  adds = Math.abs(add);

  jQuery('#add').val(adds.toFixed(1));
}

function set_attent() { // возвращает от 0 до 2
  add = Math.round(Math.random()*20)/10; 
  jQuery('#add').val(add.toFixed(1));
}

function check_random() {
  clearInterval(rand);
  cur = parseFloat(jQuery('#cur').val());
  add = add1;
  if ((cur + add) > max_discount || add == 0) { // нельзя давать скидку больше максимальной и увеличивать скидку на 0
    while ((cur + add) > max_discount || add == 0) {
      add = Math.round(Math.random()*50 - 40)/10; // возвращает от -4 до 1
      if (add > 0) {
        jQuery('#sign-a').html('+');
      } else {
        jQuery('#sign-a').html('&minus;');
      }
      adds = Math.abs(add);

      jQuery('#add').val(adds.toFixed(1));
    }
  }
  if ((cur + add) < min_discount || add == 0) { // нельзя давать скидку меньше минимальной и увеличивать скидку на 0
    while ((cur + add) < min_discount || add == 0) {
      add = Math.round(Math.random()*40 - 10)/10; // возвращает от -1 до 3
      
      if (add > 0) {
        jQuery('#sign-a').html('+');
      } else {
        jQuery('#sign-a').html('&minus;');
      }
      adds = Math.abs(add);
      
      jQuery('#add').val(adds.toFixed(1));
    }
  }
  now1 = add;
  max = cur + add;
  prev = cur;
  setTimeout('set_add('+add+', '+max+')', 300);
}

function set_add(add, max) {
  step = add/-10;

  if (add > 0) {
    mess = messages['positive'];
  } else {
    mess = messages['negative'];
  }
  set_msg = arrayRandomElement(mess);
  jQuery('#msg').text(set_msg);
  set = setInterval("set_to('add', 0)", fall_time/10);
  if (add > 0) {
    adds = '+'+add.toFixed(1);
  } else {
    adds1 = Math.abs(add);
    adds = '&minus;'+adds1.toFixed(1);
  }
  jQuery('#fall').html(adds).fadeIn(1).fadeTo(1, 0.9).animate({top: '46px', opacity: 0.2}, fall_time, function() {
    jQuery(this).fadeOut(200, function() {
      jQuery(this).css('top', '5px');
      now = prev;
      step = add/10;
      set = setInterval("set_to('cur', "+max+")", fall_time/20);
    });  
  });
}

function set_to(item, max) {
  if (item == 'add') {
    if (step > 0) {
      if (now1 + step < 0) {
        now1 += step;
      } else {
        now1 = 0;
        clearInterval(set);
        jQuery('#sign-a').hide();
      }
    } else {
      if (now1 + step > 0) {
        now1 += step;
      } else {
        now1 = 0;
        clearInterval(set);
        jQuery('#sign-a').hide();
      }
    }
    if (now1 > 0) {
      jQuery('#sign-a').html('+');
    } else {
      jQuery('#sign-a').html('&minus;');
    }
    if (Math.abs(now1.toFixed(1)) == '0') {
      jQuery('#add').val('0.0');
    } else {
      now1 = Math.abs(now1);
      jQuery('#add').val(now1.toFixed(1));
    }
  } else {
    if (max < prev) {
      if ((now + step < prev) && (now + step > max)) {
        now += step;
        jQuery('#'+item).val(now.toFixed(1));
      } else {
        now = max;
        jQuery('#'+item).val(now.toFixed(1));
        clearInterval(set);
        clickable = true;
      }
    } else {
      if ((now + step > prev) && (now + step < max)) {
        now += step;
        jQuery('#'+item).val(now.toFixed(1));
      } else {
        now = max;
        jQuery('#'+item).val(now.toFixed(1));
        clearInterval(set);
        clickable = true;
      }
    }
  }
}

function arrayRandomElement(myArray) {
  if (!myArray) return false;
  return myArray[Math.floor(Math.random()*myArray.length)];
}

jQuery(function() {
  jQuery('#cur, #add').val('0.0');
  jQuery('#clicks').val(0);
   
  //attent = setInterval('set_attent()', change_speed);
   
  jQuery('.cas').click(function() {
    if (clickable) {
      clearInterval(attent);
      setTimeout('check_random()', change_time);
      rand = setInterval('set_random()', change_speed);
      clicks = parseInt(jQuery('#clicks').val());
      clicks++;
      jQuery('#clicks').val(clicks);
      clickable = false;
    }
    return false;
  });
});