//<?php (for vim filetype stuff)
Ext.onReady(function() {

  if (lf = Ext.get('loginform')) {
    lf.on('submit', function(ev) {
      ev.preventDefault();

      Ext.Ajax.request({
        //'url': '/user/login',
        'form': 'loginform',
        'success': function(r, params) {
          var response = Ext.decode(r.responseText);
          if (!response.error) {
            window.location.reload();
            //window.location.assign('/');
          } else {
            var msg = Ext.get('login_msg');
            msg.dom.innerHTML = response.msg;
            msg.addClass('error');
          }
        },
        'failure': genericFail
      });

      return false;
    });
  }

  if (rf = Ext.get('registerform')) {
    rf.on('submit', function(ev) {
      ev.preventDefault();

      Ext.Ajax.request({
        'form': 'registerform',
        'success': function(r, params) {
          var response = Ext.decode(r.responseText);
          var msg = Ext.get('register_msg');
          msg.dom.innerHTML = response.msg;

          if (response.error) {
            msg.addClass('error');
          } else {
            msg.removeClass('error');
          }
        },
        'failure': genericFail
      });

      return false;
    });
  }

  if (cf = Ext.get('commentform')) {
    cf.on('submit', function(ev) {
      ev.preventDefault();
      old_val = Ext.get('post_content').getValue();
      ev.target.post_content.value = Ext.util.base64.encode("B64_ENCODED" + Ext.get('post_content').getValue());

      Ext.Ajax.request({
        'url': '/comment/new_comment',
        'form': 'commentform',
        'success': function(r, params) {
          var response = Ext.decode(r.responseText);
          var msg = Ext.get('comment_msg');
          if (!response.error) {
            window.location.reload();
            /*window.location.assign('#last');
            msg.dom.innerHTML = response.msg;
            msg.removeClass('error');*/
          } else {
            msg.dom.innerHTML = response.msg;
            msg.addClass('error');
          }
        },
        'failure': genericFail
      });
      ev.target.post_content.value = old_val;

      return false;
    });
  }

});

function genericFail(r, params) {
  alert('Could not send request to server: Error ' + r.status + 
    "\nPlease try again or contact us if this problem persists.");
}

Ext.util.base64 = {

  base64s : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",

    encode: function(decStr){
      if (typeof btoa === 'function') {
        return btoa(decStr);            
      }
      var base64s = this.base64s;
      var bits;
      var dual;
      var i = 0;
      var encOut = "";
      while(decStr.length >= i + 3){
        bits = (decStr.charCodeAt(i++) & 0xff) <<16 | (decStr.charCodeAt(i++) & 0xff) <<8 | decStr.charCodeAt(i++) & 0xff;
        encOut += base64s.charAt((bits & 0x00fc0000) >>18) + base64s.charAt((bits & 0x0003f000) >>12) + base64s.charAt((bits & 0x00000fc0) >> 6) + base64s.charAt((bits & 0x0000003f));
      }
      if(decStr.length -i > 0 && decStr.length -i < 3){
        dual = Boolean(decStr.length -i -1);
        bits = ((decStr.charCodeAt(i++) & 0xff) <<16) |    (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
        encOut += base64s.charAt((bits & 0x00fc0000) >>18) + base64s.charAt((bits & 0x0003f000) >>12) + (dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') + '=';
      }
      return(encOut);
    },

      decode: function(encStr){
        if (typeof atob === 'function') {
          return atob(encStr); 
        }
        var base64s = this.base64s;        
        var bits;
        var decOut = "";
        var i = 0;
        for(; i<encStr.length; i += 4){
          bits = (base64s.indexOf(encStr.charAt(i)) & 0xff) <<18 | (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 | (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 | base64s.indexOf(encStr.charAt(i +3)) & 0xff;
          decOut += String.fromCharCode((bits & 0xff0000) >>16, (bits & 0xff00) >>8, bits & 0xff);
        }
        if(encStr.charCodeAt(i -2) == 61){
          return(decOut.substring(0, decOut.length -2));
        }
        else if(encStr.charCodeAt(i -1) == 61){
          return(decOut.substring(0, decOut.length -1));
        }
        else {
          return(decOut);
        }
      }
};

//?>
