/**
** A JS function for dumping JS objects data, similar to PHP's print_r
**/
function dump(arr,return_text,level,objs_dumped) {
	if (return_text == undefined) return_text = false;
    var dumped_text = "";
	if(!level) level = 0;
    if (objs_dumped == undefined) objs_dumped = [];
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
            try {
                var value = arr[item];
                if(typeof(value) == 'object') { //If it is an array,
                    dumped_text += level_padding + "'" + item + "' ...\n";
                    // Recursion protection
                    var already_dumped = false;
                    for (var k = 0; k < objs_dumped.length; k++)
                        if (value == objs_dumped[k]) {
                            already_dumped = true;
                            dumped_text += 'recursion! (already dumped somewhere above)\n';
                        }
                    if (already_dumped == false) {
                        objs_dumped[objs_dumped.length] = value;
                        dumped_text += dump(value,true,level+1,objs_dumped);
                    }
                } else {
                    dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
                }
            } catch (err) {}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
    
    if (return_text)
        return dumped_text;
    else
        alert(dumped_text);
}

String.prototype.trim = function()
{
	return this.replace(/^\s+|\s+$/g,"");
}

String.prototype.ltrim = function()
{
	return this.replace(/^\s+/g,"");
}

String.prototype.rtrim = function()
{
	return this.replace(/\s+$/g,"");
}


/*
 * Prideda OS stiliaus parametrus prie dabartinio URL
 */
function add_params(new_params)
{
	return (document.location.href, new_params);
}

/*
 * Prideda OS stiliaus parametrus prie duoto URL
 */
function url_add_params(url, new_params)
{
	var segments = url.split('/');
	var params = segments[segments.length - 1];
	// Jei paskutinis URL segmentas prasideda kableliu, vadinasi tai yra parametru sarasas
	if (params[0] == ',') {
		params = params.split(',');
		
		// Isimam pirmaji parametra (jis bus tuscias, nes parametru sarasas prasideda kableliu)
		params.splice(0, 1);
		
		// Dabar pereisim ir pridesim/pakeisim visus is eiles perduotus parametrus
		for (i in new_params) {
			
			// Bandome surasti si parametra jau esanciuose parametruose.
			// Jei rasime, tiesiog pakeisime jo reiksme, ta kuria gavome (value).
			// Jei nerasime, pridesime si parametra.
			
			var found = false;
			
			for (j = 0; j < params.length; j++) {
				var p = params[j].split('.');
				if (p[0] == i) {
					p[1] = new_params[i];
					params[j] = p.join('.');
					found = true;
					break;
				}
			}
			if (found == false)
				params.push(i + '.' + new_params[i]);
		}
		
		params = ',' + params.join(',');
		segments[segments.length - 1] = url_sanitize(params);
	} else {
		// Jei url baigiasi simboliu /, reiskia paskutinis segmentas (params) bus tuscias.
		// Isimam ji cia, kad veliau galetume ideti.
		if (params.trim() == '')
			segments.pop();
			
		var new_segment = '';
		for (i in new_params) {
			new_segment += ',' + i + '.' + new_params[i];
		}
		segments.push(url_sanitize(new_segment));
	}
	
	uri = segments.join('/');
	
	return uri;
}

// Jei redirectinsit i uri (tarkim po paieskos kai vartotojas iveda keyworda, ta keyworda
// perduosit per parametrus)
// reikia isescapinti tam tikrus simbolius, kuriu neleidziame tiltuose
function url_sanitize(url) {
	var not_allowed = /[^a-z 0-9~%\.,:_\-]/gi;
	url = url.replace(not_allowed, ' ');
	return url;
}

// Return false, specially for windows vista ie 7
function retFalse()
{
	try
	{
		// VISTA IE 7
		window.event.returnValue = false;
	} catch (error)
	{
		// ALL OTHER (MOZILLA, OPERA, SAFARI, IE 6 & 7 ON XP)
		return false;
	}
}
