﻿(function ($) {

    $.jcookie = {

        cookie: function (name, value, expires, path, domain, secure) {
            if (arguments.length > 1) {
                var cstr = name + '=' + value;
                if (expires) cstr += ';expires=' + expires;
                if (path) cstr += ';path=' + path;
                if (domain) cstr += ';domain=' + domain;
                if (secure) cstr += ';secure=' + secure;

                document.cookie = cstr;
            }
            return deserializeCookies()[name];
        }
    };

    function deserializeCookies() {
        var data = {};
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var segments = cookies[i].split('=');
            if (!segments[0]) continue;
            data[segments.shift().replace(/^\s+|\s+$/g, '')] = segments.join('=');
        }
        return data;
    };

})(jQuery);



function typeOf(val) {
    var type = typeof (val);
    if (type == 'object') {
        if (val) {
            if (val instanceof Array) type = 'array';
        }
        else type = 'null';
    }
    return type;
};

function serializeArray(arr) {
    var retArr = [];
    for (var i = 0; i < arr.length; i++) {
        retArr.push(serializeValue(arr[i]));
    }
    return '[' + retArr.join(',') + ']';
};

function serializeValue(val) {
    var type = typeOf(val);
    switch (type) {
        case 'string': return '"' + val + '"'; break;
        case 'number': return val; break;
        case 'array': return serializeArray(val); break;
        case 'object': return $.toJSON(val); break;
    }
};

function serializeProperty(obj, prop) {
    var val = obj[prop];
    var type = typeOf(val);
    switch (type) {
        case 'string': return '"' + prop + '":"' + val + '"'; break;
        case 'number': return '"' + prop + '":' + val; break;
        case 'array': return '"' + prop + '":' + serializeArray(val); break;
        case 'object': return '"' + prop + '":' + $.toJSON(val); break;
    }
};

(function ($) {
    $.toJSON = function (obj) {
        var props = [];
        for (var prop in obj) {
            props.push(serializeProperty(obj, prop));
        }
        return '{' + props.join(',') + '}';
    };
})(jQuery);
