function HtmlDecode(s) 
{ 
	var out = ""; 
	if (s==null) return; 
	var l = s.length; 
	for (var i=0; i<l; i++) 
	{ 
		var ch = s.charAt(i); 
		if (ch == '&') 
		{ 
			var semicolonIndex = s.indexOf(';', i+1); 
			if (semicolonIndex > 0) 
			{ 
				var entity = s.substring(i, semicolonIndex+1);
				if (entity.length > 1) 
				{
					switch(entity){
						case "&eacute;":
							ch="é";
							break;
						case "&Eacute;":
							ch="É";
							break;
						case "&egrave;":
							ch="è";
							break;
						case "&Egrave;":
							ch="È";
							break;
						case "&agrave;":
							ch="à";
							break;
						case "&Agrave;":
							ch="À";
							break;
						case "&acirc;":
							ch="â";
							break;
						case "&Acirc;":
							ch="Â";
							break;
						case "&ccedil;":
							ch="ç";
							break;
						case "&Ccedil;":
							ch="Ç";
							break;
						case "&ecirc;":
							ch="ê";
							break;
						case "&Ecirc;":
							ch="Ê";
							break;
					}
				} 
				i=semicolonIndex;
			}
		}
		out += ch; 
	} 
	return out; 
}
function i18n_loc_get_default () {
    this.php_js = this.php_js || {};
    return this.php_js.i18nLocale || (i18n_loc_set_default('en_US_POSIX'), 'en_US_POSIX'); 
}
function krsort (array, sort_flags) {
    var tmp_arr={}, keys=[], sorter, i, key, that=this;
    switch (sort_flags) {
        case 'SORT_STRING': 
            sorter = function (a, b) {
                return that.strnatcmp(b, a);
            };
            break;
        case 'SORT_LOCALE_STRING': 
            var loc = this.i18n_loc_get_default();
            sorter = this.php_js.i18nLocales[loc].sorting;
            break;
        case 'SORT_NUMERIC':
            sorter = function (a, b) {
                return (b - a);
            };
            break;
        case 'SORT_REGULAR':
        default:
            sorter = function (a, b) {
                if (a < b) {
                    return 1;
                }
                if (a > b) {
                    return -1;
                }
                return 0;
            };
            break;
    }
    for (key in array) {
        keys.push(key);
    }

    keys.sort(sorter);
    for (i = 0; i < keys.length; i++) {
        key = keys[i];
        tmp_arr[key] = array[key];
        delete array[key];
    }
    for (i in tmp_arr) {
        array[i] = tmp_arr[i];
    }
    return true;
}

function strtr (str, from, to) {
    var fr = '', i = 0, j = 0, lenStr = 0, lenFrom = 0;
    var tmpFrom = [];
    var tmpTo   = [];
    var ret = '';
    var match = false;
    if (typeof from === 'object') {
        this.krsort(from);
        for (fr in from) {
            tmpFrom.push(fr);
            tmpTo.push(from[fr]);
        }
        from = tmpFrom;
        to   = tmpTo;
    }    
    lenStr  = str.length;
    lenFrom = from.length;
    for (i = 0; i < lenStr; i++) {
        match = false;
        for (j = 0; j < lenFrom; j++) {
            if (str.substr(i, from[j].length) == from[j]) {
                match = true;
                i = (i + from[j].length)-1;
                break;
            }
        }        
        if (false !== match) {
            ret += to[j];
        } else {
            ret += str[i];
        }
    }
    return ret;
}