$(function() {
  jiant.DEV_MODE = true;

  jiant.module("proRegMain", ["proRegConfig"], function($, app) {

    var view = app.views.main,
        model = app.models.main;

    jiant.onUiBound(app, function($, app) {

      $.each(pm.ldsSpecialities.specialities, function (jobType, items) {
        $.each(items, function (idx, title) {
          $.each(title, function (speciality, label) {
            view.mainSpeciality.append($('<option>', {value: speciality, text: label}));
          });
        });
      });

      view.phones.mask('(000) 000-0000');
      app.views.complainAccepted.phone.mask('(000) 000-0000');

      view.phones.customRenderer = function(obj, elem, val, isUpdate, view) {
        if (val) elem.val(val['mobile'] || val);
      };

      view.propagate(model, true, true);

      model.email_on(function(model, val) {
        if (val) {
          app.ajax.getProviderByEmail(model.email(), function(providerData) {
            if (providerData) {
              model.update(providerData, true);
              if (providerData.address) view.zip.val(providerData.address.zip);
              view.regElems.attr("disabled", "disabled");
              view.removeClass("new");
              view.addClass("existing");
            } else {
              view.regElems.val("");
              model.update({email: val}, true);
              view.regElems.attr("disabled", null);
              view.addClass("new");
              view.removeClass("existing");
            }
            view.infoContainer.show();
          });
        } else {
          view.regElems.val("");
          model.update({email: val}, true);
        }
      });

      view.providerForm.validate({
        rules: {
          name: {required: true},
          mainSpeciality: {required: true},
          email: {
            required: true,
            email: true
          },
          companyName: {
            required: true
          },
          phones: {required: true},
          'companyAddress.zip': {
            required: true,
            maxlength: 5,
            minlength: 5,
            digits: true
          },
          password: {
            required: true,
            minlength: 4,
            passwordStrong: false
          },
          confirmPassword: {
            required: true,
            equalTo: "#password"
          }
        },
        submitHandler: function(form) {
          $('body').waitMe({bg: 'rgba(255, 255, 255, 0.7)'});
          view.providerForm.submitForm("addHCCProvider", function (result) {
            view.providerForm[0].reset();
            view.hide();
            $('body').waitMe("hide");
            app.ajax.getMyAutologinUrl(function(map) {
              app.views.thankyou.find("a").attr("href", map.url);
            });
            app.views.thankyou.show();
          });
        }
      });

      app.views.complainAccepted.form.validate({
        rules: {
          phone: {required: true}
        },
        submitHandler: function(form) {
          var phone = app.views.complainAccepted.phone.val();
          app.ajax.requestCallback(phone, function() {
            app.views.complainAccepted.hide();
            app.views.willcall.show();
          });
        }
      });

      view.complainCtl.click(function() {
        view.hide();
        app.views.complainAccepted.show();
      });

      //app.views.complainAccepted.complainCtl.click(function() {
      //  complainForm.submitForm();
      //});

      app.views.complainAccepted.complainCancel.click(function() {
          app.views.complainAccepted.hide();
          view.show();
        })
    });
  });

  var app = {

    id: "pm_proReg",

    appPrefix: "_",

    crossDomain: true,

    ajaxPrefix: "",

    modules: ["proRegConfig", "proRegMain"],

    ajax: {
      getProviderByEmail: function(email, cb) {},
      requestCallback: function(phone, cb) {},
      getMyAutologinUrl: function(cb) {}
    },

    views: {
      main: {
        providerForm: jiant.form,
        infoContainer: jiant.container,
        pwdContainer: jiant.container,
        email: jiant.input,
        name: jiant.input,
        companyName: jiant.input,
        licenseNumber: jiant.input,
        mainSpeciality: jiant.input,
        regElems: jiant.collection,
        zip: jiant.input,
        phones: jiant.input,
        pwd: jiant.input,
        complainCtl: jiant.ctl
      },
      complainAccepted: {
        form: jiant.form,
        phone: jiant.input,
        complainCtl: jiant.ctl,
        complainCancel: jiant.ctl
      },
      willcall: {},
      thankyou: {}
    },

    models: {
      main: {
        jRepo: {},
        email: function(val) {},
        name: function(val) {},
        companyName: function(val) {},
        licenseNumber: function(val) {},
        mainSpeciality: function(val) {},
        zip: function(val) {},
        phones: function(val) {}
      }
    }
  };

  jiant.bindUi(app);

});