// JavaScript Document

var VOWELS="aeiouAEIOUäöüÄÖÜyY";
var CONSONANTS="bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVXWZß";
var ALPHA=VOWELS+CONSONANTS;
var WHITESPACE=" \t\r\n";
var STRETCHABLE="aefhijlmnorsuvwyzäöüAEFHIJLMNORSUVWYZÄÖÜ";
var RNDCHARS="abcdefghijklmnopqrstuvwxyzäöü";

function randomNumber(limit)
{
  return Math.floor(Math.random()*limit);
}

function removeConsString(str)
{
	ret = "";

	for(x = 0; x < str.length; x++)
	{
		if(CONSONANTS.indexOf(str.charAt(x)) == -1)
			ret+= str.charAt(x);
	}

	return ret;
}

function removeVowelsString(str)
{
	ret = "";

	for(x = 0; x < str.length; x++)
	{
		if(VOWELS.indexOf(str.charAt(x)) == -1)
			ret+= str.charAt(x);
	}

	return ret;
}

function reverseString(str)
{
	var ret = "";
	
	for(var i = str.length-1; i >= 0; i--)
		ret = ret + str.charAt(i);
		
	return ret;
}

function ripString(str)
{
	var ret = "";
	var sz = str.length;
	var c='';
	var c2='';

	for(var cnt = 0; cnt < sz;)
	{
		c = str.charAt(cnt);
		if((c != '\n') && (c != '\r') && (c != '\r'))
		{
			switch(randomNumber(7))
			{
			case 1 :
				ret += c;
			case 2:
				c2 = str.charAt(randomNumber(sz));
				if((c2 != '\n') && (c2 != '\r') && (c2 != '\r'))
					ret += c2;
			default :
				ret += c;
				cnt++;
			}
		}
		else
		{
			ret += c;
			cnt++;
		}
	}
	
	return ret;
}

function shuffleString(str)
{
	var len = str.length;
	var used = str;
	var rnd = 0;
	var ret = "";

	for(var x = 0; x < len; x++)
	{
		rnd = randomNumber(used.length);

		ret += used.charAt(rnd);

		used = used.substr(0,rnd)+used.substr(rnd+1,used.length-rnd);
	}

	return ret;
}

function cmabridgeString(str)
{
	return str.charAt(0)+shuffleString(str.substr(1,str.length-2))+str.charAt(str.length-1);
}

function spamizideString(str)
{
	var outstr = "";
	var addstr = "\"'-.:;`^°´·¸¨­_,";

	for(x = 0; x < str.length; x++)
	{
		switch(str.charAt(x))
		{
		case 'e' :
			outstr += "èéêë".charAt(randomNumber(4));
			break;
		case 'u' :
			outstr += "ùúûü".charAt(randomNumber(4));
			break;
		case 'i' :
			outstr += "ìíîï".charAt(randomNumber(4));
			break;
		case 'o' :
			outstr += "òóôõöø".charAt(randomNumber(6));
			break;
		case 'a' :
			outstr += "àáâãäå".charAt(randomNumber(6));
			break;
		case 'y' :
			outstr += "ýÿ".charAt(randomNumber(2));
			break;
		case 'l' :
			outstr += "1l".charAt(randomNumber(2));
			break;
		case 'n' :
			outstr += "ñ";
			break;
		case 'c' :
			outstr += "ç";
			break;
		default :
			if(randomNumber(2) == 1)
				outstr += addstr.charAt(randomNumber(addstr.length));
			outstr += str.charAt(x);
		}
	}

	return outstr;
}

function sortcompare(c1, c2)
{
	switch(c1)
	{
	case 'ä' :
		c1 = 'a';
		break;
	case 'ö' :
		c1 = 'o';
		break;
	case 'ü' :
		c1 = 'u';
		break;
	case 'ß' :
		c1 = 's';
		break;
	case 'Ä' :
		c1 = 'A';
		break;
	case 'Ö' :
		c1 = 'O';
		break;
	case 'Ü' :
		c1 = 'U';
		break;
	}
	switch(c2)
	{
	case 'ä' :
		c2 = 'a';
		break;
	case 'ö' :
		c2 = 'o';
		break;
	case 'ü' :
		c2 = 'u';
		break;
	case 'ß' :
		c2 = 's';
		break;
	case 'Ä' :
		c2 = 'A';
		break;
	case 'Ö' :
		c2 = 'O';
		break;
	case 'Ü' :
		c2 = 'U';
		break;
	}

	c1 = c1.toLowerCase();
	c2 = c2.toLowerCase();

	if(c1 == c2)
		return 0;
	if(c1 < c2)
		return -1;
   return 1;
}

function sortString(str) // quite slow at the moment
{
	var s = str;
	var i, j;
	
	for (i = s.length - 1; i >= 0; i--)
	{
		for (j = 0; j <= i; j++)
		{
			if(sortcompare(s.charAt(j+1),s.charAt(j)) < 0)
			{
				s = s.substr(0,j)+s.charAt(j+1)+s.charAt(j)+s.substr(j+2,s.length-1);
			}
		}
	}
	
	return s;
}

function randomizeString(str)
{
	var sz = randomNumber(str.length*2)+1;
	var len = str.length;
	var ret = "";
	var zz;

	for(zz = 0; zz < sz; zz++)
	{
		ret += str.charAt(randomNumber(len));
	}

	return ret;
}

function stretch(str,degree)
{
	var ret = "";
	var deg = degree;
	var stretchables = 0;
	var len = str.length;
	var center = length/2;
	var stretchlen;
	var cnr = 0;
	var links = true;
	var x = 0;

	for(x = 0; x < str.length; x++)
	{
		if(STRETCHABLE.indexOf(str.charAt(x)) != -1)
			stretchables++;
	}

	stretchlen = Math.ceil(degree/stretchables);

	//alert(str+" "+stretchlen+" "+stretchables+" "+degree/stretchables);
	
	while((center-cnr >= 0) || (center+cnr < len))
	{
		if(links)
		{
			if(center-cnr >= 0)
			{
				ret = str.charAt(center-cnr)+ret;
				if(STRETCHABLE.indexOf(str.charAt(center-cnr)) != -1)
				{
					for(x = 0; x < stretchlen; x++)
					{
						if(deg <= 0)
							break;
						ret = str.charAt(center-cnr)+ret;
						deg--;
					}
				}			
			}
			if(cnr == 0)
				cnr++;
			else
				links = false;
		}
		else
		{
			if(center+cnr < len)
			{
				ret += str.charAt(center+cnr);
				if(STRETCHABLE.indexOf(str.charAt(center+cnr)) != -1)
				{
					for(x = 0; x < stretchlen; x++)
					{
						if(deg <= 0)
							break;
						ret += str.charAt(center+cnr);
						deg--;
					}
				}			
			}
			links = true;
			cnr++;
		}
	}

	return ret;
}

function stretchrndString(str)
{
	return stretch(str,randomNumber(str.length));
}

function contaminateString(str,degree)
{
	if(degree <= 0)
		return str;

	var s = str;
	var remov = randomNumber(degree);
	var d;
	var pos;

	for(d = 0; d < remov; d++)
	{
		if(s != "")
		{
			pos = randomNumber(s.length);
			s = s.substring(0,pos)+s.substring(pos+1,s.length);
		}
	}

	for(d = 0; d < degree-remov; d++)
	{
		if(s == "")
			pos = 0;
		else
			pos = randomNumber(s.length);
		s = s.substring(0,pos)+RNDCHARS.charAt(randomNumber(RNDCHARS.length))+s.substring(pos,s.length);		
	}

	return s;
}

function contaminaterndString(str)
{
	return contaminateString(str,randomNumber(str.length+1));
}

function alphaOnlyString(str)
{
	ret = "";
	cs = VOWELS+CONSONANTS+WHITESPACE;

	for(x = 0; x < str.length; x++)
	{
		if(cs.indexOf(str.charAt(x)) != -1)
			ret += str.charAt(x);
		else
			ret += " ";
	}

	return ret;
}

function condenseString(str)
{
	ret = "";
	var waswhite = true;
	var x = 0;

	for(x = 0; x < str.length; x++) 
	{
		if(WHITESPACE.indexOf(str.charAt(x)) == -1)
		{
			ret += str.charAt(x);
			waswhite = false;
		}
		else
			if(!waswhite)
			{
				ret += str.charAt(x);
				waswhite = true;
			}
	}

	return ret;
}

function partrndString(str)
{
	var ret = "";
	var rmaxlen = 10;
	var rlen = randomNumber(rmaxlen);
	
	for(x = 0; x < str.length; x++)
	{
		ret += str.charAt(x);
		if(rlen == 0)
		{
			ret += " ";
			rlen = randomNumber(rmaxlen);
		}
		else
			rlen--;
	}
	
	return ret;
}

function splitlettersString(str)
{
	var ret = "";
	
	if(str == "")
		return "";
	ret = str.charAt(0);
	for(x = 1; x < str.length; x++)
	{
		ret += " "+str.charAt(x);
	}
	
	return ret;
}
