var numexp = /^[\d]+$/;
var numexp_replace = /[^\d]+/gi;
var floatexp_replace = /[^\d,\.]+/gi;
var floatexp_format = /[^\d,\.]+/gi;
var numformat_replace = /^[^\d\,]+$/;

var keyboard_key = {
	UP: 38,
	DOWN: 40,
	DEL: 46,
	TAB: 9,
	RETURN: 13,
	ESC: 27,
	COMMA: 188,
	PAGEUP: 33,
	PAGEDOWN: 34,
	BACKSPACE: 8,
	SPACE: 32
};

function inspect(t,return_value){
	
	var txt = "";
	var total_txt = "";
	var textarray = false;
	var count=0;
	if(typeof(t) == "string"){
		if(return_value) return t;
		alert(t);
		return false;
	}
	for(var i in t){
		var val = t[i];
		if(typeof(val) == "object" && return_value){
			txt += i+"{\n"+inspect(val,return_value)+"}\n";
			total_txt += i+"{\n"+inspect(val,return_value)+"}\n";
			count++;
		}else{
			txt += i+" = "+t[i]+"\n";
			total_txt += i+" = "+t[i]+"\n";
			count++;
		}
		if(count > 20){
			if(textarray === false){textarray = [];}
			textarray.push(txt);
			count=0;
			txt = "";
		}
	}
	if(return_value) return total_txt;
	if(textarray){
		for(var i in textarray){
			alert(textarray[i]);
		}
	}else{
		alert(txt);
	}
	
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function getFloat(floatval){
	floatval = floatval.toString().replace(floatexp_replace,"");
	floatval = floatval.replace(",",".");
	return parseFloat(floatval);
	//return parseFloat(
}

function number_format(number, decimals, dec_point, thousands_sep,debug) {
	number = (number+'').replace(',', '').replace(' ', '');
	var n = !isFinite(+number) ? 0 : +number, 
	prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
	sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
	dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
	s = '',
	toFixedFix = function (n, prec) {
	var k = Math.pow(10, prec);
	return '' + Math.round(n * k) / k;
	};
	// Fix for IE parseFloat(0.55).toFixed(0) = 0;
	s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
	if (s[0].length > 3) {
	s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
	}
	if ((s[1] || '').length < prec) {
	s[1] = s[1] || '';
	s[1] += new Array(prec - s[1].length + 1).join('0');
	}
	return s.join(dec);
}

function parseUri (str) {
	var	o   = parseUri.options,
		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
		uri = {},
		i   = 14;

	while (i--) uri[o.key[i]] = m[i] || "";

	uri[o.q.name] = {};
	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
		if ($1) uri[o.q.name][$1] = $2;
	});
	
	
	var extexp = /(.+)\.([a-z0-9]+)$/i;
	if(extexp.test(uri.file)){
		uri.filebody = uri.file.replace(extexp,"$1");
		uri.fileext = uri.file.replace(extexp,"$2");
	}
	
	return uri;
};

parseUri.options = {
	strictMode: false,
	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
	q:   {
		name:   "queryKey",
		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
	},
	parser: {
		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
	}
};

function html_encode(s) {
	var html = escape(s);
	html = html.replace(/\//g,"%2F");
	html = html.replace(/\?/g,"%3F");
	html = html.replace(/=/g,"%3D");
	html = html.replace(/&/g,"%26");
	html = html.replace(/@/g,"%40");
	return html;

} 
function html_decode(s){
	return unescape(s);

}
function convert_backslashes(s) {
	return s.replace(/\\/g, "/");
}


function add_trailing_slashes(s){
	if(typeof s == "string" && s.length > 0){
		s = convert_backslashes(s);
		s += s.substr((s.length-1),1) != "/" ? "/":"";
	}
	return s;
}

