﻿(function($) {
    var $s = $.serpentine = {
        trigger: function(element, eventName, options) {
            var e = new $.Event(eventName);
            $.extend(e, options);
            e.stopPropagation();
            $(element).trigger(e);
            return e.isDefaultPrevented();
        },

        delegate: function(context, handler) {
            return function(e) {
                handler.apply(context, [this, e]);
            };
        },

        getUrlVars: function(name) {
            var vars = [], hash;
            var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

            var j = 0;
            for (var i = 0; i < hashes.length; i++) {
                hash = hashes[i].split('=');                
                if (hash[0] == name) {
                    vars[j] = hash[1];
                    j++
                }
            }

            return vars;
        },

        urlEncode: function(c) {
            var o = ''; var x = 0; c = c.toString(); var r = /(^[a-zA-Z0-9_.]*)/;
            while (x < c.length) {
                var m = r.exec(c.substr(x));
                if (m != null && m.length > 1 && m[1] != '') {
                    o += m[1]; x += m[1].length;
                } else {
                    if (c[x] == ' ') o += '+'; else {
                        var d = c.charCodeAt(x); var h = d.toString(16);
                        o += '%' + (h.length < 2 ? '0' : '') + h.toUpperCase();
                    } x++;
                }
            } return o;
        },

        urlDecode: function(s) {
            var o = s; var binVal, t; var r = /(%[^%]{2})/;
            while ((m = r.exec(o)) != null && m.length > 1 && m[1] != '') {
                b = parseInt(m[1].substr(1), 16);
                t = String.fromCharCode(b); o = o.replace(m[1], t);
            } return o;
        }
    };
})(jQuery);
