/**
 * registration.js
 *
 * Version history (please keep backward compatible):
 * 1.0, 2008-05-15: Cornelius Hansjakob
 *
 * @author Cornelius Hansjakob <cha@massiveart.com>
 * @version 1.0
 */

var Account = Class.create({

  initialize: function() {
    this.retValue = false;
    this.blnUniqueness = false;
    this.blnMatching = false;
  },

  /**
   * compare two fields (email1, email2)
   */
  compareMails: function() {
    if( $F('Email1') != $F('Email2') ){
      $('Email1').addClassName('missinginput');
      $('Email2').addClassName('missinginput');
      $('divMessageEmailNoMatch').setStyle({display: 'block'});
      $('divMessageEmailMatch').setStyle({display: 'none'});
      $('Email2').activate();
      return false;
    }else{
      $('divMessageEmailMatch').setStyle({display: 'block'});
      $('divMessageEmailNoMatch').setStyle({display: 'none'});
      $('Email1').removeClassName('missinginput');
      $('Email2').removeClassName('missinginput');
      return true;
    }
  },

  /**
   * compare two fields (password1, password2)
   */
  comparePasswords: function() {
    if( $F('Password1') != $F('Password2') ){
      $('Password1').addClassName('missinginput');
      $('Password2').addClassName('missinginput');
      $('divMessagePasswordNoMatch').setStyle({display: 'block'});
      $('divMessagePasswordMatch').setStyle({display: 'none'});
      $('Password2').activate();
      return false;
    }else{
      $('divMessagePasswordMatch').setStyle({display: 'block'});
      $('divMessagePasswordNoMatch').setStyle({display: 'none'});
      $('Password1').removeClassName('missinginput');
      $('Password2').removeClassName('missinginput');
      return true;
    }
  },

  validateInput: function(element,baseValue) {
    if(($(element) && $F(element).blank()) || $F(element) == baseValue){
      $(element).addClassName('missinginput');
      $('divMessage'+element).setStyle({display: 'block'});
      this.retValue = false;
    }else{
      $('divMessage'+element).setStyle({display: 'none'});
      $(element).removeClassName('missinginput');
    }
  },

  validateSpecialChars: function(element) {
    if($(element) && $F(element).match(/[^A-Za-z0-9\-]/)){
      $(element).addClassName('missinginput');
      $('divMessageCheckSpecialChars'+element).setStyle({display: 'block'});

      $(element).addClassName('badfield');
      $(element).removeClassName('goodfield');

      this.retValue = false;
    }else{
      $('divMessageCheckSpecialChars'+element).setStyle({display: 'none'});
      $(element).removeClassName('missinginput');

      $(element).addClassName('goodfield');
      $(element).removeClassName('badfield');
    }
  },

  validateSelect: function(element) {

    if($F(element) == '' || $F(element) == 'plchoose') {
      $(element).addClassName('missinginput');
      $('divMessage'+element).setStyle({display: 'block'});
      this.retValue = false;
    }else{
      $('divMessage'+element).setStyle({display: 'none'});
      $(element).removeClassName('missinginput');
    }

  },

  /**
   * add account
   */
  add: function(button) {
    this.addBusyClass(button);

    var newsletter;

    this.retValue = true;

    // validate fname field
    this.validateInput('FName',_fname);
    this.validateInput('SName',_sname);
    this.validateInput('Email1',_email);
    this.validateInput('Email2',_email);
    this.validateInput('Street',_street);
    this.validateInput('PostCode',_postCode);
    this.validateInput('City',_city);
    this.validateSelect('Country');
    this.validateInput('Username',_username);
    this.validateInput('Password1',_password);
    this.validateInput('Password2',_password);
    this.validateInput('Company',_company);
    this.validateInput('ZcopeUrl',_zcopeUrl);
    //this.checkUniqueness('clients','dbName','ZcopeUrl');

    if(this.blnUniqueness == true)
      this.validateSpecialChars('ZcopeUrl');

    //this.validateInput('CouponCode',_code);
    //this.checkMatching('coupons','code','CouponCode');

    this.validateSelect('Account');

    if(this.blnUniqueness == false)
      this.retValue = false;

    //if(this.blnMatching == false)
    //  this.retValue = false;

    if(this.compareMails() == false)
      this.retValue = false;

    if(this.comparePasswords() == false)
      this.retValue = false;

    if($F('Account') != 1 && $F('Account') != '' && $('TryFirst').checked == false)
      this.validateSelect('PaymentType');

    if($('CheckNewsletter').checked == true)
      newsletter = 1
    else
      newsletter = 0;

    if(this.retValue == true) {
       $('noticebox').setStyle({display: 'none'});
       this.blnUniqueness = false;

       switch (Number($F('Account'))) {
        case 1:
          $('iFramePackageType').src = '/registration/free_registration.php';
          break;  
        case 2:
          $('iFramePackageType').src = '/registration/starter_trial_registration.php';
          break;
        case 3:
          $('iFramePackageType').src = '/registration/basic_trial_registration.php';
          break;
        case 4:
          $('iFramePackageType').src = '/registration/extended_trial_registration.php';
          break;
        case 5:
          $('iFramePackageType').src = '/registration/enterprise_trial_registration.php';
          break;
       }       

       new Ajax.Request('/registration/add', {
        parameters: { Email: $F('Email1'),
                      Fname: $F('FName'),
                      Sname: $F('SName'),
                      Street: $F('Street'),
                      PostCode: $F('PostCode'),
                      City: $F('City'),
                      Country: $F('Country'),
                      Username: $F('Username'),
                      Password: $F('Password1'),
                      Company: $F('Company'),
                      ZcopeUrl: $F('ZcopeUrl').toLowerCase(),
                      Trial: $('TryFirst').checked,
                      CouponCode: $F('CouponCode'),
                      PackageTypeId: $F('Account'),
                      PaymentType: $F('PaymentType'),
                      Newsletter: newsletter,
                      LanguageId: _language},
        onComplete: function(transport) {
          this.removeBusyClass(button);
                    
          if(transport.responseText != '' && $F('Account') > 1 && !isNaN(transport.responseText)){
            $('iFramePaymentCheckout').src = '/payments/payment_checkout.php?AccountId='+transport.responseText;
            $('divPaymentCheckout').show();
            $('divRegistrationForm').hide();
            $('logo').scrollTo();
          }else if(transport.responseText != '' && transport.responseText.startsWith('http://')){
            window.location = transport.responseText;
          }
        }.bind(this)
      });
    }else{
      this.removeBusyClass(button);
      $('noticebox').setStyle({display: 'block'});
      $('noticebox').scrollTo();
    }
  },

  /**
   * check uniqueness of fields
   */
  checkUniqueness: function(table,field,element) {
    $(element).addClassName('busyfield');

    new Ajax.Request('/registration/checkuniqueness', {
      parameters: { Table: table,
                    Field: field,
                    Value: $F(element).toLowerCase()},
      onComplete: function(transport) {
        $(element).removeClassName('busyfield');

        if(transport.responseText == 'true'){
          this.blnUniqueness = true;

          $(element).addClassName('goodfield');
          $(element).removeClassName('badfield');

          $('divMessageCheck'+element).setStyle({display: 'none'});
          $(element).removeClassName('missinginput');

          this.validateSpecialChars(element);
        }else{
          this.blnUniqueness = false;

          $(element).addClassName('badfield');
          $(element).removeClassName('goodfield');

          $(element).addClassName('missinginput');
          $('divMessageCheck'+element).setStyle({display: 'block'});
        }
      }.bind(this)
    });
  },

  /**
   * check matching of fields
   */
  checkMatching: function(table,field,element) {
    $(element).addClassName('busyfield');

    new Ajax.Request('/registration/checkmatching', {
      parameters: { Table: table,
                    Field: field,
                    Value: $F(element)},
      onComplete: function(transport) {
        $(element).removeClassName('busyfield');

        if(transport.responseText == 'true'){
          this.blnMatching = true;

          $(element).addClassName('goodfield');
          $(element).removeClassName('badfield');

          $('divMessageCheck'+element).setStyle({display: 'none'});
          $(element).removeClassName('missinginput');
        }else{
          this.blnMatching = false;

          $(element).addClassName('badfield');
          $(element).removeClassName('goodfield');

          $(element).addClassName('missinginput');
          $('divMessageCheck'+element).setStyle({display: 'block'});
        }
      }.bind(this)
    });
  },

  /**
   * copy zcope url to zcope address field (readonly)
   */
  copyZcopeUrl: function() {

    var url = $('ZcopeUrl').value;
    if(($('ZcopeUrl') && $F('ZcopeUrl').blank()) || $F('ZcopeUrl') == _zcopeUrl){
      this.retValue = false;
    }else{
      $('ZcopeAddress').value = url + '.zcope-engine.com';
    }
  },

  /**
   * focus fields
   */
  focus: function(element,baseValue,newValue) {

    if(baseValue == newValue){
      $(element).value = '';
      $(element).setStyle({color: '#000'});
    }

  },

  /**
   * check AGBs
   */
  toggleButton: function() {

    if($F('Account') == 1 || $F('Account') == '' || $('TryFirst').checked == true){
      $('divButtonNext').hide();
      $('divButtonRegister').show();
      this.showHideButtons('divButtonRegisterTrans');
    }else{
      $('divButtonNext').show();
      $('divButtonRegister').hide();
      this.showHideButtons('divButtonNextTrans');
    }
  },

  /**
   * change classes active/non-active buttons
   */
  showHideButtons: function(element){
    if($('Check_AGB').checked == true){
      $(element).hide();      
    } else{
      $(element).show(); 
    }
  },

  /**
   * select package
   */
  selectPackage: function(element) {

    if(element != ''){
      for(var i = 0; i < $('Account').length; i++) {
        if($('Account').options[i].value == element) {
          $('Account').options[i].selected = true;

          if($('Account').options[i].value == 1){
            $('divChooseTrial').hide();
          }else{
            $('divChooseTrial').show();
            if($('TryFirst').checked == false){
              $('divChooseAccounting').show();  
            }
          }
        }
      }
    }

  },

  /**
   * addBusyClass
   */
  addBusyClass: function(busyElement) {
    if($(busyElement)){
      $(busyElement).addClassName('busywhite');
    }
  },

  /**
   * removeBusyClass
   */
  removeBusyClass: function(busyElement) {
    if($(busyElement)){
      $(busyElement).removeClassName('busywhite');
    }
  }
});

/**
 * initialize Account Object
 */
var myAccount = new Account();
