﻿jQuery.browser.msie6 = jQuery.browser.msie && parseInt(jQuery.browser.version) == 6;
jQuery.browser.msie7 = jQuery.browser.msie && parseInt(jQuery.browser.version) == 7;

jQuery.extend({
    arrayToString: function(e) {
        var output = "";
        for (var key in e) {
            if (e[key] != null) {
                output += output.length > 1 ? ", " : "";
                output += $.format("'{0}': '{1}'", $.namedArrayEscape(key), $.namedArrayEscape(e[key]));
            }
        }
        return "{" + output + "}";
    },
    arrayToXml: function(e) {
        var output = "<data>";

        for (var key in e) {
            if (e[key] != null) {
                output += $.format("<item name=\"{0}\">{1}</item>", $.xmlEscapeAttribute(key), $.xmlEscapeNode(e[key]));
            }
        }
        output += "</data>";

        return output;
    },

    namedArrayEscape: function(s) {
        return s.toString().replace(/\'/g, "&apos;");
    },

    xmlEscapeAttribute: function(s) {
        return s.toString().replace(/\'/g, "&apos;").replace(/\"/g, "&quot;");
    },

    xmlEscapeNode: function(s) {
        return s.toString().replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    }
});

jQuery.querystring = {
    'data': function(options) {
        options = $.extend({ startChar: "?" }, options || {});
        var url = document.location.toString();
        var q = {};

        url = url.indexOf(options.startChar) > -1 ? url.substring(url.indexOf(options.startChar) + 1) : "";
        
        if (url.indexOf("#") > -1) {
            url = url.substring(0, url.indexOf("#"));
        }

        return url.tokenize(/([^=&]+)=([^&]*)/g);
    },
    'val': function(options, defaultValue) {
        if (options.constructor == String) {
            defaultValue = defaultValue || null;
            options = { field: options, defaultValue: defaultValue };
        }
        options = $.extend({ field: null, defaultValue: null }, options || {});

        var output = options.field ? jQuery.querystring.data(options)[options.field] : jQuery.querystring.data(options);
        return output || options.defaultValue;
    },
    'toString': function(data) {
        var qs = data || jQuery.querystring.data();
        var ret = "";

        for (var key in qs) {
            ret = (ret ? ret + "&" : "") + key + "=" + qs[key];
        }
        return ret;
    }
};

jQuery.namedAnchor = {
    'enabled': true,
    'data': null,
    'add': function(data, value) {
        if (data.constructor == String) {
            var newName = {};
            newName[data] = value;
            data = newName;
        }
        var qs = jQuery.namedAnchor.data || $.querystring.data({ startChar: "#" });
        jQuery.namedAnchor.data = $.extend(qs, data);
    },
    'remove': function(data) {
        if (data.constructor == String) {
            var newName = {};
            newName[data] = true;
            data = newName;
        }

        var qs = jQuery.namedAnchor.data || jQuery.querystring.data({ startChar: "#" });
        var ret = {};

        for (var key in qs) {
            if (!data[key]) {
                ret[key] = qs[key];
            }
        }

        jQuery.namedAnchor.data = ret;
    },
    'clear': function() {
        jQuery.namedAnchor.data = {};
    },
    'run': function() {
        if (jQuery.namedAnchor.enabled) {
            document.location = "#" + $.querystring.toString((jQuery.namedAnchor.data || ""));
        }
    },
    'get': function() {
        jQuery.namedAnchor.data = jQuery.namedAnchor.data || jQuery.querystring.data({ startChar: "#" });
        return jQuery.namedAnchor.data;
    }
};

jQuery.PxToEm = function (value) {
    return (value / 10) + "em";
};



//deprecated
jQuery.run = function(e) {
    setTimeout(e, 100);
}

String.prototype.tokenize = function(regex) {
    var value = this.toString();
    var q = {};

    value.replace(/([^=&]+)=([^&]*)/g, function(m, key, value) {
        q[key] = (q[key] ? q[key] + "," : "") + value;
    });
    return q;
}

