/**
 * JSON Cookie - jquery.jsoncookie.js
 *
 * Sets and retreives native JavaScript objects as cookies.
 * Depends on the object serialization framework provided by JSON2.
 *
 * Dependencies: jQuery, jQuery Cookie, JSON2
 *
 * @project JSON Cookie
 * @author Randall Morey
 * @version 0.9
 */
(function ($) {
  var isObject = function (x) {
    return (typeof x === 'object') && !(x instanceof Array) && (x !== null);
  };

  $.extend({
    getJSONCookie: function (cookieName) {
      var cookieData = $.cookie(cookieName);
      return cookieData ? JSON.parse(cookieData) : {};
    },
    setJSONCookie: function (cookieName, data, options) {
      var cookieData = '';

      options = $.extend({
        expires: 90,
        path: '/'
      }, options);

      if (!isObject(data)) {  // data must be a true object to be serialized
        throw new Error('JSONCookie data must be an object');
      }

      cookieData = JSON.stringify(data);

      return $.cookie(cookieName, cookieData, options);
    },
    removeJSONCookie: function (cookieName) {
      return $.cookie(cookieName, null);
    },
    JSONCookie: function (cookieName, data, options) {
      if (data) {
        $.setJSONCookie(cookieName, data, options);
      }
      return $.getJSONCookie(cookieName);
    }
  });
})(jQuery);

