﻿//For http://www.example.com/test?special=&zip=00125
//$.query().zip -> 125 (number)
//$.query(false).zip -> 00125 (string)

(function(){
    var after_type_cast = {};
    var before_type_cast = {};
    var cached = false;
    
    jQuery.query = function(cast) {
        if(!cached) {
            // remove leading ? and trailing &
            var q = location.search.replace(/^\?/,'').replace(/\&$/,'').split('&');
            for( var i = q.length - 1; i >= 0; i-- ) {
                var p = q[i].split('='), key = p[0], val = p[1];
                before_type_cast[key] = val;
                // convert floats
                if(/^[0-9.]+$/.test(val))
                    val = parseFloat(val);
                // convert booleans
                if(/^(true|false)$/.test(val))
                    val = (val == 'true');
                // ingnore empty values
                if(val)
                    after_type_cast[key] = val;
            }
            cached = true;
        }
        return cast === false ? before_type_cast : after_type_cast;
    };
})();