/* 
 * Discount Card Processor
 */
var card = {
  start: function() {
    if ($('discount-ajax')) {
      card.status('fail');
      card.typeCheck();
    }
  },
  //seteaza statusul informativ referitor la validitatea codului
  status: function(status) {
    $('card-info').removeClassName('card-loader')
    .removeClassName('card-success')
    .removeClassName('card-type')
    .removeClassName('card-fail');
    switch(status) {
      case 'loader':
        $('card-info').addClassName('card-loader');
        $('discount-info').innerHTML = '';
        break;
      case 'success':
        $('card-info').addClassName('card-success');
        break;
      case 'type':
        $('card-info').addClassName('card-type');
        $('discount-info').innerHTML = '';
        break;
      case 'fail':
      default:
        $('card-info').addClassName('card-fail');
        break;
    }
  },
  check: function () {
    var elements = $$('.card-field');

    var all = true;
    elements.each(function(next) {
      if ($(next).getValue().length != $(next).readAttribute('maxlength')) all = false;
    });

    return all;
  },
  //eveniment de type in textboxex care in functie
  //de completarea lor, executa anumite actiuni
  typeCheck: function() {
    $$('.card-field').each(function (element, i) {
      //daca a fost verificat prin ajax codul curent introdus
      var checked = false;

      //key speciale pe care nu le luam in considerare (enter/backspace/tab etc)
      var specialKeys = [8, 17, 18, 9, 16, 20, 27];

      var lastsize = {};

      //la incarcare verificam daca sunt toate campurile completate
      if (card.check()) {
        var code = card.code();

        checked = code;
        card.ajax(code, false);
      }

      Event.observe(element, 'keyup', function (event) {
        var elements = $$('.card-field');

        //daca avem toate elementele completate facem submit la ajax
        if (card.check()) {
          var code = card.code();

          //verificam codul prin ajax
          if (checked == false || checked != code) {
            checked = code;
            card.ajax(code, true);
          }

          return;
        }
        else checked = false;

        //default setam fail
        card.status('fail');

        var empty = true;
        elements.each(function(element){
          if ($(element).getValue().length > 0) empty = false;
        });
        if (!empty) card.status('type');

        //daca apasam backspace si elementul e gol, sarim la primul
        if ($(element).getValue().length == 0 && event.keyCode == 8 && !lastsize[$(element).getAttribute('name')]) {
          var current = false;
          elements.each(function(next) {
            if ($(next).readAttribute('name') == $(element).readAttribute('name') && current) {
              $(current).focus();
              throw $break;
            }
            else current = next;
          });
        }

        //daca ajunge la captul unui textbox, sa treaca la urmatorul
        if ($(element).getValue().length == $(element).readAttribute('maxlength') &&
            specialKeys.indexOf(event.keyCode) == -1) {
          current = false;
          elements.each(function(next) {
            if (current) {
              $(next).activate();
              throw $break;
            }
            if ($(next).readAttribute('name') == $(element).readAttribute('name')) current = true;
          });
        }

        lastsize[$(element).getAttribute('name')] = $(element).getValue().length;
      });

      Event.observe(element, 'keydown', function (event) {
        var elements = $$('.card-field');

        
      });
    });
  },
  code: function() {
     var code = '';
    //adunam parametrii din formular (codul cardului)
    $$('.card-field').each(function(element) {
      code += $(element).getValue();
    });
    
    return code;
  },
  ajax: function (code, focus) {
    card.status('loader');

    //disablam textboxurile
    var elements = $$('.card-field');
    elements.each(function(e) {
      e.disable();
    });

    new Ajax.Updater('discount-ajax', swf_options.url_ajax_card, {
        parameters: {code: code},
        onComplete: function () {
          var content = $('discount-ajax').innerHTML;
          var data = content.split('|');
          $('discount-info').innerHTML = data[1];
          if (data[0] == 1) card.status('success');
          else card.status('fail');

          //activam textboxurile
          elements.each(function(e) {
            e.enable();
            if (focus) e.focus();
          });

          //updatam informatia de price
          new Ajax.Updater('preview_ajax', swf_options.url_ajax_preview_price, {
            parameters: Form.serialize(elements[0].form)
          });
        }
    });
  }
}

Event.observe(window, 'load', card.start);


