var wizardSaved = false;
var accountOk = false;
var domainOk = false;
var typeAndCatOk = false;

QuickWizard = {

  /* Codes:
   * 0 = ok
   * 1 = passwords not same
   * 2 = password illegal
   * 3 = username illegal
   * 4 = username taken with different password
   */
  accountValidation: function(code) {
    Element.hide("password_field_error_notequal");
    Element.hide("password_field_error_notvalid");
    Element.hide("email_field_error_notvalid");
    Element.hide("email_field_error_registered");

    if (code == 0) {
      QuickWizard.saveWizard(true, true);
    }
    else if (code == 1) {
      Element.show("password_field_error_notequal");
    }
    else if (code == 2) {
      Element.show("password_field_error_notvalid");
    }
    else if (code == 3) {
      Element.show("email_field_error_notvalid");
    }
    else if (code == 4) {
      Element.show("email_field_error_registered");
    }
  },

  validateAccount: function() {
    var insideAjaxUrl = "";
    if (typeof(ajaxUrl) == 'undefined' ){
      insideAjaxUrl = ajax_public_url;
    } else {
      insideAjaxUrl = ajaxUrl;
    }

    var email = $("email").value;
    var pwd1 = $("password").value;
    var pwd2 = $("password2").value;
    new Ajax.Updater('ajax_response', insideAjaxUrl,
         {parameters:"resource=quickwizard&action=check_account&email=" + email + "&pwd1=" + pwd1 + "&pwd2=" + pwd2,
          asynchronous:true,
          evalScripts:true,
          onComplete:function(){ }});
  },

  /* Codes:
   * 0 = ok
   * 1 = domain not free
   * 2 = domain not valid
   */
  domainValidation: function(code, finalValidation) {
    Element.hide('domain_field_loader');
    Element.hide('domain_field_ok');
    Element.hide('domain_field_error_reserved');
    Element.hide('domain_field_error_notvalid');

    if (code == 0) {
      Element.show('domain_field_ok');
      if (finalValidation == "false")
        setTimeout("QuickWizard.continueAfterDomainValidation()", 500);
      else
        QuickWizard.saveWizard(true, false);
    }
    else if (code == 1) {
      Element.show('domain_field_error_reserved');
      Element.scrollTo('step1');
    }
    else if (code == 2) {
      Element.show('domain_field_error_notvalid');
      Element.scrollTo('step1');
    }
  },
  continueAfterDomainValidation: function() {
    // Used only in moogo wizard
    //Element.show('step4');
    //Element.scrollTo('step4');
  },

  validateDomain: function(finalValidation) {
    var url = $("url_field").value;
    url = escape(escape(url));

    var insideAjaxUrl = "";
    if (typeof(ajaxUrl) == 'undefined' ){
      insideAjaxUrl = ajax_public_url;
    } else {
      insideAjaxUrl = ajaxUrl;
    }

    var domain = ""; //$("domain_field").value;
    if ($("domain_field").options) {
      for (var i = 0; i < $("domain_field").options.length; i++) {
        if ($("domain_field").options[i].selected)
          domain = $("domain_field").options[i].value;
      }
    } else {
      domain = $("domain_field").value;
    }
    Element.show('domain_field_loader');
    new Ajax.Updater('ajax_response', insideAjaxUrl,
         {parameters:"resource=quickwizard&action=check_domain&domain=" + domain + "&url=" + url + "&finalValidation=" + finalValidation,
          asynchronous:true,
          evalScripts:true,
          onComplete:function(){ }});
  },

  isValidWebsiteName: function() {
    Element.hide('name_field_error_required');

    if ($("name_field").value == "") {
      Element.show('name_field_error_required');
      Element.scrollTo('step1');
      return false;
    }

    return true;
  },

  isValidTypeAndCategory: function() {
    Element.hide('customertype_field_error_required');
    Element.hide('category_field_error_required');

    var typeObj = $("customertype");
    var catObj = $("category");
    var type = typeObj.value; //typeObj.options[typeObj.options.selectedIndex].value;
    var cat = catObj.value; //catObj.options[catObj.options.selectedIndex].value;

    if (type == "") {
      Element.show('customertype_field_error_required');
      Element.scrollTo('step3');
    }

    if (cat == "") {
      Element.show('category_field_error_required');
      Element.scrollTo('step3');
    }

    return (type != "" && cat != "");
  },

  scaleSpacer: function(step) {
    var viewh = document.viewport.getDimensions().height;
    var steph = Element.getHeight("step" + step);
    $("step_spacer").style.height = (viewh - steph - 30) + "px";
  },


  /**
   * Save the web site
   */
  saveWizard: function(domainValidated, accountValidated) {
    if (wizardSaved == true) return;

    if ($("name_field")) {
      if (QuickWizard.isValidWebsiteName() == false) {
        return false;
      }
    }

    // URL
    if (domainValidated == false) {
      QuickWizard.validateDomain(true);
      return false;
    }

    if (accountValidated == false) {
      QuickWizard.validateAccount();
      return false;
    }

    if (accountOk == false || domainOk == false) return false;

    if ($("customertype") && $("category")) {
      if (QuickWizard.isValidTypeAndCategory() == false) {
        return false;
      }
    }

    // All good, save
    wizardSaved = true;
    Element.hide("wizard_save_button");
    Element.show("wizard_save_loader");
    $("quickwizard_wizard_form").submit();
   },

   /**
    * Changes category dropdown in Setup Wizard form
    */
   changeCategory: function(type, rootlabel, selectedOption) {

     var options = [];
     options.push( new FakeSelectOption(rootlabel, '') );

     if (type && type != "") {
       for (var i = 0; i < categories[type].length; i++) {
         var text = categories[type][i][1];
         var value = categories[type][i][0];
         var samples = categories[type][i][2];
         if (samples && samples.length > 0) {
           text = text + " (" + samples + ")";
         }
         options.push( new FakeSelectOption(text, value) );
       }
     }
     $('category_selector').stopObserving('click');
     var catSel = new FakeSelect('category_selector', options);
     catSel.setOnChangeFunction( function(currentValue) {
       $('category').value = currentValue;
     });
   }
}

Registration = {
  cleanUrl: function(url) {
      var s = url.toLowerCase();
      s = s.replace(/\s+/g, '');
      return s;
  },
  checkUrlChars: function(str) {
      var s = str.toLowerCase();
      s = s.replace(/[ä]/g, "a");
      s = s.replace(/[ö]/g, "o");
      s = s.replace(/[å]/g, "a");
      s = s.replace(/&amp;[^;\s]+;/g, '');
      s = s.replace(/[^\w\s]/g, '');
      s = s.replace(/\s+/g, '');
      s = s.replace(/[_]/g, '');
      return s;
  },
  setUrl: function(urlField, nameFieldValue) {
    if(!urlField)
      return;
    if(typeof nameFieldValue == "undefined" || nameFieldValue == null)
      nameFieldValue = "";
    urlField.value = Registration.checkUrlChars(nameFieldValue).substr(0, 60);
  }
}
