function filterTuning( select ) {
	if ( $F('useEffects') && $('filterImg') ) Effect.Pulsate( 'filterImg', { duration: 0.3 } );
	var txt_in = $('txt_in');
	var txt_out = $('txt_out');
	var autoClip = $('autoClip');
	var filtered = '';

	if ( txt_in.tagName.toLowerCase() == 'input' )
		var src = $F('txt_in');
	else
		var src = unsafe_value( txt_in.innerHTML );

/*	switch( select.options[ select.selectedIndex ].value )*/
	switch( $F( select ) )
	{
		case 'shit':
			filtered = filter_shit( src );
			txt_out.innerHTML = safe_value( filtered );
			break;

		case 'lower':
			filtered = ( src ).toUpperCase();
			txt_out.innerHTML = safe_value( filtered );
			break;

		case 'upper':
			filtered = ( src ).toLowerCase();
			txt_out.innerHTML = safe_value( filtered );
			break;

		case 'sentence':
			filtered = filter_sentence( src );
			txt_out.innerHTML = safe_value( filtered );
			break;

		case 'haxor':
			filtered = filter_swichChars( src, plChars );
			filtered = filter_swichChars( filtered, haxorChars );
			txt_out.innerHTML = safe_value( filtered );
			break;

		case 'signs':
			filtered = filter_swichChars( src, plChars );
			filtered = filter_swichChars( filtered, singsChars );
			txt_out.innerHTML = safe_value( filtered );
			break;

		case 'noPL':
			filtered = filter_swichChars( src, plChars );
			txt_out.innerHTML = safe_value( filtered );
			break;
	}

	if ( autoClip.checked ) {
		if (! clipboard( filtered, 1 ) )
			autoClip.checked = false;
	}

	if (! $('txt_out_div').visible() ) Effect.Grow('txt_out_div');
}

function filtersButtonRefresh() {
	var i = $F('filter_crapOut') ? 1 : 0;
	i += $F('filter_addSpaces') ? 1 : 0;
	i += $F('filter_sentence') ? 1 : 0;
	var str = '';
	switch (i) {
		case 0:
			str = 'wy³±czone';
			break;
		case 1:
			str = '1 z 3 aktywny';
			break;
		case 2:
		case 3:
			str = i+' z 3 aktywne';
			break;
	}
	$('filters_button').innerHTML = str;
}

function refreshFilters() {
	filtersButtonRefresh();
	objects.each(function(obj){
		$('obj_'+obj[0]+'_txt').innerHTML = filter( obj[1][0] );
	});
}

function filter( str ) {
	if ( $F('filter_crapOut') )
		str = filter_crapOut( str );
	if ( $F('filter_addSpaces') )
		str = filter_addSpaces( str );
	if ( $F('filter_sentence') )
		str = filter_sentence( str );
	return str;
}


var haxorChars = {
't': '+',
'e': '3',
'a': '4',
'i': '!',
'o': '0',
'h': 'H',
'k': 'K',
's': '$'
};

var singsChars = {
'b': 'ß',
'a': 'ã',
'n': 'n',
'c': 'ç',
'y': 'Y',
's': '§',
'o': 'ö',
'r': 'ø',
'u': 'µ',
'h': '¶',
'r': 'à',
'd': 'ï',
'u': 'ü',
'i': 'í',
'e': 'é'
};

var plChars = {
'±': 'a',
'¶': 's',
'³': 'l',
'ó': 'o',
'¼': 'z',
'¿': 'z',
'ê': 'e',
'æ': 'c',
'ñ': 'n',
'Ê': 'E',
'Ó': 'O',
'¡': 'A',
'¬': 'Z',
'¦': 'S',
'£': 'L',
'¯': 'Z',
'Æ': 'C',
'Ñ': 'N'
};

var crap = '(&#123;|&#125;|\\s|=|~|\\*|&gt;|&lt;|:|\\.|&#092;|/|-|\\+)';
var re_crap = null;
var re_capitalCount = null;
var re_lowerCount = null;

function filter_crapOut( str ) {
	re_crap = new RegExp('^'+crap+'+|'+crap+'+$');
	while ( re_crap.test( str ) ) {
		str = str.replace( re_crap, '' );
	}
	return str;
}

function filter_addSpaces( str ) {
	var test = unsafe_value( str );

	re_capitalCount = new RegExp('[A-Z¡¦¯¬Æ£ÓÊÑ]','g');
	var capitalCount = test.length - test.replace( re_capitalCount, '' ).length;

	re_lowerCount = new RegExp('[a-z±¶¼æ¿ó³êñ]','g');
	var lowerCount = test.length - test.replace( re_lowerCount, '' ).length;

	var margin = 20;
	var margin_value = ( capitalCount + lowerCount ) / 100 * margin;

	if ( Math.abs( lowerCount - capitalCount ) < margin_value ) {
		return str;
	}

	var out = '';
	for ( var i=0; i < str.length; i++ ) {
		if ( i == 0 || ! _isChar( str.charAt(i) ) )
			out += str.charAt(i);
		else if ( str.charAt(i).toUpperCase() == str.charAt(i) && _isChar( str.charAt(i-1) ) )
			out += ' '+str.charAt(i).toLowerCase();
		else out += str.charAt(i);
	}
	return out;
}

function _isChar( ch ) {
	ch = filter_swichChars( ch, plChars );
	return ch.toLowerCase().charCodeAt(0) >= 'a'.charCodeAt(0) && ch.toLowerCase().charCodeAt(0) <= 'z'.charCodeAt(0)
}

function filter_sentence( str )
{
	var out = '';
	var start = true;
	var lastSep = '';
	for ( var i=0; i < str.length; i++ ) {
		if ( str.charAt(i) == ' ' )
			out += ' ';
		// todo: wielokropki
		else if ( str.charAt(i) == '?' || str.charAt(i) == '!' ) {
			if ( str.charAt(i) == lastSep )
				continue;

			out += str.charAt(i);
			lastSep = str.charAt(i);
			start = true;
		} else if ( start ) {
			out += str.charAt(i).toUpperCase();
			start = false;
			lastSep = '';
		// simple emots anti-lower
		} else if ( str.charAt(i-1) == ':' || str.charAt(i-1) == ';' || str.charAt(i-1) == '-' ) {
			out += str.charAt(i);
		} else
			out += str.charAt(i).toLowerCase();
	}

	return out;
}

function filter_swichChars( str, switchTable )
{
	var out = '';
	var tmp;
	for ( var i=0; i < str.length; i++ ) {
		tmp = str.charAt(i).toLowerCase();
		if ( switchTable[ tmp ] )
			out += switchTable[ tmp ];
		else
			out += tmp;
	}

	return out;
}

function filter_shit( str )
{
	var out = '';

	for ( var i=0; i < str.length; i++ ) {
		if ( i == 0 || !( i % 2 ) )
			out += str.charAt(i).toUpperCase();
		else
			out += str.charAt(i).toLowerCase();
	}

	return out;
}