/**
 * Ajax functions
 */

YAHOO.namespace('BLUEVIEW.util');
YAHOO.namespace('BLUEVIEW.ajax');

(function () {
  var Y = YAHOO,
      B = Y.BLUEVIEW,
      BU = B.util,
      BA = B.ajax,
      JSON = Y.lang.JSON;

  BU.json_decode = function (s) {
    return JSON.parse(s);
  }

  BU.json_encode = function (o) {
    return JSON.stringify(o);
  }

  BU.post_encode = function (o) {
    var data = [];
    var i, len;
    for (var k in o) if (o.hasOwnProperty(k)) {
      if (Y.lang.isArray(o[k])) {
        for (i=0, len=o[k].length; i<len; i+=1) {
          data.push(k+'[]='+encodeURIComponent(o[k][i]));
        }
      } else {
        data.push(k + '=' + encodeURIComponent(o[k]));
      }
    }
    data = data.length ? 
                data.join('&') : 
                null;
    return data;
  } 

  BA.request = function (o) {
    o.method = o.method || 'post';
    o.callback = o.callback || {};
    o.postData = o.data ? BU.post_encode(o.data) : null;

    if (o.postData && o.method == 'get') {
      o.uri += '?' + o.postData;
    }

    return Y.util.Connect.asyncRequest(
      o.method, o.uri, o.callback, o.postData
    );
  }
})();

