/**
 * CanvasHead.js - Custom functions HTML_AJAX pairs javascript code
 *
 */

/************************
 * Serializing Scripts
 ************************/

OCP_RENDER.serialize = function(inp)
{
    var type = OCP_RENDER.gettype(inp);
    var val;

    switch (type) {
        case "function":
    case "undefined":
        val = "N";
        break;
    case "boolean":
        val = "b:" + (inp ? "1" : "0");
        break;
    case "number":
        val = (Math.round(inp) == inp ? "i" : "d") + ":" + inp;
        break;
    case "string":
        val = "s:" + inp.length + ":\"" + inp + "\"";
        break;
    case "array":
        val = "a";
    case "object":
        if (type == "object") {
            var objname = inp.constructor.toString().match(/(\w+)\(\)/);
            if (objname == undefined) {
                return;
            }
            objname[1] = OCP_RENDER.serialize(objname[1]);
            val = "O" + objname[1].substring(1, objname[1].length - 1);
        }
        var count = 0;
        var vals = "";
        var okey;
        for (key in inp) {
            okey = (key.match(/^[0-9]+$/) ? parseInt(key) : key);
            vals += OCP_RENDER.serialize(okey) +
                    OCP_RENDER.serialize(inp[key]);
            count++;
        }
        val += ":" + count + ":{" + vals + "}";
        break;
    }

    if (type != "object" && type != "array")
                val += ";";

    return val;
};

OCP_RENDER.gettype =  function(inp)
{
    var type = typeof inp;
    if (type == "object")
        {
        var cons = inp.constructor.toString().toLowerCase();
        var types = ["boolean", "number", "string", "array", "function"];
        for (key in types)
                {
            if (cons.indexOf(types[key]) != -1)
                        {
                type = types[key];
                break;
            }
        }
    }

    return type;
};





