//	-----   feel free to use this stuff   ---   play with it   ---   copy as You  like   -----
//	-----   but leave this authors 2 lines untouched:   pseliger@gmx.net  [july 2003]    -----
//
//	extended javascript-api-methods	:
//	* jsApi-extension-name / file-name	: "jsApi.String.searchAndReplace.dev.js"
//	* original download-location	: "http://www.pseliger.de/jsExtendedApi/jsApi.String.searchAndReplace.dev.js"
//
//	first public release: july 2002	- the pure js-code comes with 1.767 bytes;
//
String.prototype.extendedSearch = function(searchValue,behaviour) {
	var regExpMaskArray = new Array(".","+","*","?","^","$","|","(",")","[","]","{","}");
	for (var i=0;i<regExpMaskArray.length;i++) {
		searchValue = searchValue.replace(new RegExp("\\"+regExpMaskArray[i],"g"),("\\"+regExpMaskArray[i]));
	}
	var stringValue = this;
	var searchArray = new Array();
	var searchArrayLength = searchArray.length;

	var regExpression = ((behaviour == "strictly") ? (new RegExp(searchValue,"")) : (new RegExp(searchValue.replace(/\s+/g,"\\\s+"),"i")));

	while (regExpression.test(stringValue)) {
		regExpression.exec(stringValue);
		searchArray[searchArrayLength] = new Object();
		searchArray[searchArrayLength].index = RegExp.index;
		searchArray[searchArrayLength].match = RegExp.$1;
		searchArrayLength = searchArray.length;
		stringValue = stringValue.replace(new RegExp(regExpression),"");
	}
	return ((searchArray.lengt === 0) ? (-1) : (searchArray));
};
/*
	// [EN]
	//
	// - searches the string globaly for the given text ("searchValue"):
	//	* running in default-mode (2nd parameter "behaviour" is not provided or features a value not equal to "strictly")
	//	  case sensitivity  as well as  accurate white space sequences will be ignored; this kind of searching behaviour
	//	  also could be described as "loosely";
	//	* if the second parameter is set to "strictly" both case sensitivity and matching white space sequences will be
	//	  recognised;
	// - returns an array of twosome values (or couple values):
	//	* "Array[i].match" returns the term that matches with "searchValue";
	//	* "Array[i].index" keeps the position where the above match took place;
	//
	// [DE]
	//
	// - durchsucht den string global nach dem angegebenen text ("searchValue"):
	//	* im default-modus (zweiter parameter "behaviour" ist nicht angegeben oder hat einen wert ungleich "strictly")
	//	  wird dabei weder auf gross-	/	klein	-schreibung noch auf exakte white-space-sequenzen geachtet; die art dieses
	//	  suchverhaltens kann man auch als "loosely" ("locker/frei") bezeichnen;
	//	* wird der zweite parameter auf "strictly" ("streng/genau") gesetzt, wird sowohl auf uebereinstimmungen in der
	//	  gross-/klein-schreibung als auch auf exakte white-space-sequenzen geachtet;
	//	- liefert ein array von paar-werten zurueck:
	//	* "Array[i].match" liefert den ausdruck zurueck, welcher mit "searchValue" uebereinstimmt;
	//	* "Array[i].index" haelt die position der uebereinstimmung von "Array[i].match" mit "searchValue";
*/
String.prototype.globalReplace = function(searchValue,replaceValue,behaviour) {
	var regExpMaskArray = new Array(".","+","*","?","^","$","|","(",")","[","]","{","}");
	for (var i=0;i<regExpMaskArray.length;i++) {
		searchValue = searchValue.replace(new RegExp("\\"+regExpMaskArray[i],"g"),("\\"+regExpMaskArray[i]));
	}
	return this.replace(((behaviour == "strictly") ? (new RegExp(searchValue,"g")) : (new RegExp(searchValue.replace(/\s+/g,"\\\s+"),"gi"))),replaceValue);
};
/*
	// [EN]
	//
	// - searches the string globaly for the given text ("searchValue"):
	//	* running in default-mode (3rd parameter "behaviour" is not provided or features a value not equal to "strictly")
	//	  case sensitivity  as well as  accurate white space sequences will be ignored; this kind of searching behaviour
	//	  also could be described as "loosely";
	//	* if the third parameter is set to "strictly"  both case sensitivity  and matching white space sequences will be
	//	  recognised;
	// - replaces EVERY match of parameter "searchValue" with the given value of parameter "replaceValue";
	//
	// [DE]
	//
	// - durchsucht den string global nach dem angegebenen text ("searchValue"):
	//	* im default-modus (zweiter parameter "behaviour" ist nicht angegeben oder hat einen wert ungleich "strictly")
	//	  wird dabei weder auf gross-/klein-schreibung noch auf exakte white-space-sequenzen geachtet; die art dieses
	//	  suchverhaltens kann man auch als "loosely" ("locker/frei") bezeichnen;
	//	* wird der zweite parameter auf "strictly" ("streng/genau") gesetzt, wird sowohl auf uebereinstimmungen in der
	//	  gross-/klein-schreibung als auch auf exakte white-space-sequenzen geachtet;
	// - ersetzt JEDES vorkommen von parameter "searchValue" mit dem wert von parameter "replaceValue";
*/
String.prototype.singleReplace = function(searchValue,replaceValue,behaviour) {
	var regExpMaskArray = new Array(".","+","*","?","^","$","|","(",")","[","]","{","}");
	for (var i=0;i<regExpMaskArray.length;i++) {
		searchValue = searchValue.replace(new RegExp("\\"+regExpMaskArray[i],"g"),("\\"+regExpMaskArray[i]));
	}
	return this.replace(((behaviour == "strictly") ? (new RegExp(searchValue,"")) : (new RegExp(searchValue.replace(/\s+/g,"\\\s+"),"i"))),replaceValue);
};
/*
	// [EN]
	//
	// - behaves like method "String.globalReplace()" except for the replacing
	//   that will be executed only onces and therefore takes effect only to
	//   the first occurrence of "searchValue" within the string;
	//
	// [DE]
	//
	// - verhaelt sich wie die methode "String.globalReplace()", nur das genau
	//   einmal beim ersten vorkommen "searchValue" mit "replaceValue" ersetzt
	//   wird;
*/