$.extend({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;}
});




/* URL Enconde
     * ------------------------------------*/
    url_encode = function(val)  {
        // The Javascript escape and unescape functions do not correspond
        // with what browsers actually do...
        var SAFECHARS = "0123456789" +					// Numeric
                        "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
                        "abcdefghijklmnopqrstuvwxyz" +
                        "-_.!~*'()";					// RFC2396 Mark characters
        var HEX = "0123456789ABCDEF";

        var plaintext = val;
        var encoded = "";
        for (var i = 0; i < plaintext.length; i++ ) {
            var ch = plaintext.charAt(i);
            if (ch == " ") {
                encoded += "+";				// x-www-urlencoded, rather than %20
            } else if (SAFECHARS.indexOf(ch) != -1) {
                encoded += ch;
            } else {
                var charCode = ch.charCodeAt(0);
                if (charCode > 255) {
//                    alert( "Unicode Character '"
//                            + ch
//                            + "' cannot be encoded using standard URL encoding.\n" +
//                              "(URL encoding only supports 8-bit characters.)\n" +
//                              "A space (+) will be substituted." );
                    encoded += "+";
                } else {
                    encoded += "%";
                    encoded += HEX.charAt((charCode >> 4) & 0xF);
                    encoded += HEX.charAt(charCode & 0xF);
                }
            }
        } // for

        return encoded;
        return false;
    }

    /* URL Decode
    * ------------------------------------*/

    url_decode = function(val) {
       // Replace + with ' '
       // Replace %xx with equivalent character
       // Put [ERROR] in output if %xx is invalid.
       var HEXCHARS = "0123456789ABCDEFabcdef";
       var encoded = val;
       var plaintext = "";
       var i = 0;
       while (i < encoded.length) {
           var ch = encoded.charAt(i);
           if (ch == "+") {
               plaintext += " ";
               i++;
           } else if (ch == "%") {
                if (i < (encoded.length-2)
                        && HEXCHARS.indexOf(encoded.charAt(i+1)) != -1
                        && HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
                    plaintext += unescape( encoded.substr(i,3) );
                    i += 3;
                } else {
    //				alert( 'Bad escape combination near ...' + encoded.substr(i) );
                    plaintext += "%[ERROR]";
                    i++;
                }
            } else {
               plaintext += ch;
               i++;
            }
        } // while
       return plaintext;
    };