// Erstellt eine echte Array Kopie
Array.prototype.copy = function()
{
     var tmp = new Array();
     for (var i = 0; i < this.length; i++)  
     {
     	tmp[i] = this[i];
     }
     return tmp;
}

// Prueft ob der angegebene Wert im Array vorkommt, gibt true bzw. false zurueck
Array.prototype.in_array = function( arrayvalue ) 
{
	for (var i = 0; i < this.length; i++)
	{
		if (this[i] === arrayvalue)
		{
			return true;
		}
	}
	return false;
};

// sucht den Text und gibt den Index zurueck
Array.prototype.search = function( arrayvalue ) 
{
	for (var i = 0; i < this.length; i++)
	{
		if (this[i] === arrayvalue)
		{
			return i;
		}
	}
	return -1;
};

// Trimmt einen String
String.prototype.trim = function( )
{
	var oldstring = this;
	var newstring = '';
	for (var i = 0; i < oldstring.length; i++)
	{
		if (oldstring.substr(i, 1) != ' ')
		{
			newstring += oldstring.substr(i, 1);
		}
	}
	return newstring;
}

// String Rot 13 auf String, siehe PHP Doku
String.prototype.str_rot13 = function( )
{
	var text = this;
	var strtext = '';
	for (var i = 0; i < text.length; i++)
	{
		if (text.charCodeAt(i) >= 65 && text.charCodeAt(i) <= 90)
		{
			if (text.charCodeAt(i) + 13 > 90)
			{
				newcode = (65 - 1) + (13 - (90 - text.charCodeAt(i)));
				strtext = strtext + String.fromCharCode(newcode).toString();
			}
			else
			{
				strtext = strtext + String.fromCharCode(text.charCodeAt(i) + 13).toString();
			}
		}
		else if (text.charCodeAt(i) >= 97 && text.charCodeAt(i) <= 122)
		{
			if (text.charCodeAt(i) + 13 > 122)
			{
				newcode = (97 - 1) + (13 - (122 - text.charCodeAt(i)));
				strtext = strtext + String.fromCharCode(newcode).toString();
			}
			else
			{
				strtext = strtext + String.fromCharCode(text.charCodeAt(i) + 13).toString();
			}
		}
		else
		{
			strtext = strtext + text.charAt(i).toString();
		}
	}
	
	return strtext;
}


/**
 * Parst den String zu einem Floatwert
 */
String.prototype.parse2float = function()
{
	var text = this;
	var strtext = '';
	strtext = text.replace(/,/gi, '.');
	strtext = strtext.replace(/[^0-9\.]+/gi, '');
	if (strtext.indexOf('.') != strtext.lastIndexOf('.'))
	{
		var p1 = strtext.substr(0, strtext.lastIndexOf('.'));
		p1 = p1.replace(/\./gi, '');
		strtext = p1 + strtext.substr(strtext.lastIndexOf('.'));
	}
	
	return strtext;
}

/**
 * Parst den String zu einem Intwert
 */
String.prototype.parse2int = function()
{
	var text = this;
	
	text = text.replace(/[^0-9]/gi, '');
	
	return text;
}

/**
 * Loescht alle Tags, bis auf die Uebergebenen
 * @param {Object} allowed_tags
 */
String.prototype.strip_tags = function(allowed_tags) 
{
	var str = this;
	// http://kevin.vanzonneveld.net
	// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: Luke Godfrey
	// +      input by: Pul
	// +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   bugfixed by: Onno Marsman
	// +      input by: Alex
	// +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +      input by: Marc Palau
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +      input by: Brett Zamir (http://brett-zamir.me)
	// +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   bugfixed by: Eric Nagel
	// +      input by: Bobby Drake
	// +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   bugfixed by: Tomasz Wesolowski
	// *     example 1: strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>');
	// *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
	// *     example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');
	// *     returns 2: '<p>Kevin van Zonneveld</p>'
	// *     example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>");
	// *     returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'
	// *     example 4: strip_tags('1 < 5 5 > 1');
	// *     returns 4: '1 < 5 5 > 1'
	
	var key = '', allowed = false;
	var matches = [];
	var allowed_array = [];
	var allowed_tag = '';
	var i = 0;
	var k = '';
	var html = '';
	
	var replacer = function (search, replace, str) 
	{
		return str.split(search).join(replace);
	};
	
	// Build allowes tags associative array
	if (allowed_tags) 
	{
		allowed_array = allowed_tags.match(/([a-zA-Z0-9]+)/gi);
	}
	
	str += '';
	
	// Match tags
	matches = str.match(/(<\/?[\S][^>]*>)/gi);
	
	// Go through all HTML tags
	for (key in matches) 
	{
		if (isNaN(key)) 
		{
		// IE7 Hack
			continue;
		}
		
		// Save HTML tag
		html = matches[key].toString();
		
		// Is tag not in allowed list? Remove from str!
		allowed = false;
		
		// Go through all allowed tags
		for (k in allowed_array) 
		{
			// Init
			allowed_tag = allowed_array[k];
			i = -1;
			
			if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}
			if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');}
			if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag)   ;}

	        // Determine
	        if (i == 0) 
			{
				allowed = true;
				break;
			}
		}
		
		if (!allowed) 
		{
			str = replacer(html, "", str); // Custom replace. No regexing
		}
	}
	
	return str;
}

/**
 * Aendert die Dezimalen HTML-Unicode-Zeichen (&#123;) in lesbare JS-Zeichen
 */
String.prototype.parsehtmlentities = function()
{
	var str = this;
	var search = /&#([0-9]+);/;
	
	while (result = search.exec(str))
	{
		var newchar = String.fromCharCode(result[1]);
		str = str.replace(result[0], newchar);
	}
	
	return str;
}