Ext.ns('Ext.ux');
Ext.ux.login = (function() {
   // start: login specific
   function hideLoginFields() {
      Ext.get('hiddenForm1Row1').setDisplayed('none');
      Ext.get('hiddenForm1Row2').setDisplayed('none');
   }

   function loadGroupField(d) {
      var combo = Ext.get('hiddenForm1Field3');
      var comboEl = combo.dom;

      while (comboEl.options.length) {
         comboEl.options[0] = null;
      }

      for (var i = 0, len = d.length; i < len; i++) {
         comboEl.options[i] = new Option(d[i][1], d[i][0]);
      }
   }

   function showGroupField() {
      Ext.get('hiddenForm1Row3').setDisplayed(true);
   }
   // end: login specific

   function validate(field) {
      if (field === '') {
         return false;
      }
      return true;
   }

   return {
      // submit the login
      submit : function(){
         var emailField = Ext.get('hiddenForm1Field1');
         var email = emailField.dom.value;
         var pwdField = Ext.get('hiddenForm1Field2');
         var pwd = pwdField.dom.value;
         var groupField = Ext.get('hiddenForm1Field3');
         var group = groupField.dom.value;

         if (validate(email) === false) {
            alert('Your email address is required');
            return;
         }

         if (validate(pwd) === false) {
            alert('Your password is required');
            return;
         }

         Ext.Ajax.request({
            url: 'desktop/services.php',
            params: {
               service: 'login',
               user: email,
               pass: pwd,
               group: group,
               guest: false
            },
            success: function (o) {
               if (typeof o == 'object') {
                  var d = Ext.decode(o.responseText);

                  if (typeof d == 'object') {
                     if (d.success == true) {
                        var g = d.groups;

                        if (g && g.length > 0) {
                           hideLoginFields();
                           showGroupField();

                           var d = [];
                           for (var i = 0, len = g.length; i < len; i++) {
                              d.push([g[i].id, g[i].name]);
                           }

                           loadGroupField(d);

                        } else if (d.sessionId !== '') {
                           Ext.ux.extbox.close();

                           // get the path
                           var path = window.location.pathname;
                           path = path.substring(0, path.lastIndexOf('/') + 1);

                           // set the cookie
                           set_cookie('sessionId', d.sessionId, '', path, '', '');

                           // redirect the window
                           window.location = path + 'desktop/';
                        }
                     } else {
                        if (d.errors && d.errors[0].msg) {
                           alert(d.errors[0].msg);
                        } else {
                           alert('Errors encountered on the server.');
                        }
                     }
                  }
               }
            },
            failure: function () {
               alert('Lost connection to server.');
            }
         });
      },

      // send to the email
      send : function(){
         var emailField = Ext.get('hiddenForm2Field1');
         var email = emailField.dom.value;

         if (validate(email) === false) {
            alert('Your email address is required');
            return;
         }

         Ext.Ajax.request({
            url: 'desktop/services.php',
            params: {
               service: 'forgotPassword',
               user: email
            },
            success: function (o) {
               if (typeof o == 'object') {
                  var d = Ext.decode(o.responseText);

                  if (typeof d == 'object') {
                     if (d.success == true) {
                        alert('Your password has been sent to your email.');
                        Ext.ux.extbox.close();
                     } else {
                        if (d.errors) {
                           alert(d.errors[0].msg);
                        } else {
                           alert('Errors encountered on the server.');
                        }
                     }
                  }
               }
            },
            failure: function () {
               alert('Lost connection to server.');
            }
         });
      },

      register : function(){
         var firstNameField = Ext.get('hiddenForm1Field4');
         var firstName = firstNameField.dom.value;

         var lastNameField = Ext.get('hiddenForm1Field5');
         var lastName = lastNameField.dom.value;

         var emailField = Ext.get('hiddenForm1Field6');
         var email = emailField.dom.value;

         var emailVerifyField = Ext.get('hiddenForm1Field7');
         var emailVerify = emailVerifyField.dom.value;

         var pwdField = Ext.get('hiddenForm1Field8');
         var pwd = pwdField.dom.value;

         var pwdVerifyField = Ext.get('hiddenForm1Field9');
         var pwdVerify = pwdVerifyField.dom.value;

         if(validate(firstName) === false){
            alert("Your first name is required");
            return;
         }

         if(validate(lastName) === false){
            alert("Your last name is required");
            return;
         }

         if(validate(email) === false){
            alert("Your email address is required");
            return;
         }

         if(validate(emailVerify) === false || (email !== emailVerify)){
            alert("Please verify your email address again");
            return;
         }

         if(validate(pwd) === false){
            alert("Your password is required");
            return;
         }

         if(validate(pwdVerify) === false || (pwd !== pwdVerify)){
            alert("Please verify your password again");
            return;
         }

         Ext.Ajax.request({
            url: 'desktop/services.php'
            , params: {
               service: 'signup'
               , first_name: firstName
               , last_name: lastName
               , email: email
               , email_verify: emailVerify
               , pwd: pwd
               , pwd_verify: pwdVerify
               , comments: ''
            }
            , success: function(o){
               if(typeof o == 'object'){
                  var d = Ext.decode(o.responseText);

                  if(typeof d == 'object'){
                     if(d.success == true){
                        firstNameField.dom.value = '';
                        lastNameField.dom.value = '';
                        emailField.dom.value = '';
                        emailVerifyField.dom.value = '';
                        pwdField.dom.value = '';
                        pwdVerifyField.dom.value = '';
                        
                        alert('Your sign up request has been sent. \n\nYou will receive an email notification once we process your request.');
                        Ext.ux.extbox.close();
                     }else{
                        if(d.errors){
                           alert(d.errors[0].msg);
                        }else{
                           alert('Errors encountered on the server.');
                        }
                     }
                  }
               }
            }
            , failure: function(){
               alert('Lost connection to server.');
            }
         });
      }
   };
})();
