function embeddedURL(inString){
	var urlRE = /(h{1}ttp:\/\/[a-z0-9&;._\-\/\?=]+)/i;
	var urlArray
	var outString = "";
	while (urlRE.test(inString)){
		urlArray = urlRE.exec(inString);
		outString += RegExp.leftContext + "<a target='PSNew' HREF='" + RegExp.$1 + "'>" + RegExp.$1 + "</A>";		
		inString =  RegExp.rightContext;
	}
	outString += inString;
	return outString;
}

var OrTerms = "";
var ReqTerms = "";
var ExclTerms = "";
var theTerms = "";

function extractTerm(reIn,inString){
	var PPArray
	var outString = "";
	while (reIn.test(inString)){
		PPArray = reIn.exec(inString);
		outString += RegExp.leftContext
		theTerms += RegExp.$1 + "|" ;
		inString = RegExp.rightContext;
	}
	outString += inString;
	return outString;
}

function extractTerms(SearchString){
	var re;
	
	//Terminate SearchString in a space
	SearchString += " ";
	
	// Replace single quotes with two single quotes
	re = /'/g;
	SearchString = SearchString.replace(re,"''");

	// Our delimiter is a vertical bar, so we can't have any of those
	re = /\|/g;
	SearchString = SearchString.replace(re," ");

	// extract +"phrases"
	re = /\+"([^"]+)"/
	SearchString = extractTerm(re,SearchString); 
	ReqTerms = theTerms ;
	theTerms = "";
	
	// extract -"phrases"
	re = /\-"([^"]+)"/
	SearchString = extractTerm(re,SearchString); 
	ExclTerms = theTerms ;
	theTerms = "";
	
	// extract "phrases"
	re = /"([^"]+)"/
	SearchString = extractTerm(re,SearchString); 
	OrTerms = theTerms ;
	theTerms = "";

	// replace any commas (outside of Phrases) with spaces
	re = /,/g;
	SearchString = SearchString.replace(re," ");

	// replace multi-white space characters (outside of Phrases) with a single white space
	re = /\s+/g;
	SearchString = SearchString.replace(re," ");
	
	// extract +words
	re = /\+([^\s]+)/
	SearchString = extractTerm(re,SearchString); 
	ReqTerms += theTerms ;
	theTerms = "";
	
	// extract -words
	re = /\-([^\s]+)/
	SearchString = extractTerm(re,SearchString); 
	ExclTerms += theTerms ;
	theTerms = "";
	
	// extract words
	re = /([^\s]+)/
	SearchString = extractTerm(re,SearchString); 
	OrTerms += theTerms ;
	theTerms = "";
}
function getorTerms(){
	return OrTerms;
}
function getReqTerms(){
	return ReqTerms;
}
function getExclTerms(){
	return ExclTerms;
}

function CRLFGetRid(inString){
	var outString;
	var recr = /\r/g;
	var relf = /\n/g;
	outString = inString.replace(relf,"");
	return outString.replace(recr,"\\n");
}
function CRLFStrip(inString){
	var outString;
	var recr = /\r/g;
	var relf = /\\n/g;
	if (!inString){
		return "";
	}
	outString = inString.replace(relf," ");
	return outString.replace(recr,"");
}

function HTMLDecode(inString){
	var outString;
	var relt = /&lt;/g
	var regt = /&gt;/g
	var reamp = /&amp;/g
	var reqt = /&quot;/g
	outString = inString.replace(relt,"<");
	outString = outString.replace(regt,">");
	outString = outString.replace(reamp,"&");
	outString = outString.replace(reqt,"\"");
	return outString;
}

function differentQuotes(inString){
	re=/"/g;
	return inString.replace(re,"'");
}
function CRLFEncodeS(inString){
	var outString;
	var recr = /\r/g;
	var relf = /\\n/g;
	if(!inString){
		return ""
	}
	outString = inString.replace(relf,"<BR>");
	return outString.replace(recr,"");
}

function CRLFDecode(inString){
	var outString;
	var recr = /\r/g;
	var relf = /\\n/g;
	if(!inString){
		return ""
	}
	outString = inString.replace(relf,"\n");
	return outString.replace(recr,"");
}

function az09Only(inString){
	var recr = /[^A-Za-z0-9]/g;
	return inString.replace(recr,"");
}
function startUnderscore(inString){
	var recr = /^_/;
	return inString.replace(recr,"");
}

function validEmailAddress(emailAddress){
	var re = /^[\w\-\$\&\.]+@{1}[\w\-\$\&]+\.{1}[\w\-\$\&]+$/;
	var re1 = /^[\w\-\$\&\.]+@{1}[\w\-\$\&]+\.{1}[\w\-\$\&]+\.{1}[\w\-\$\&]+$/;
	var re2 = /^[\w\-\$\&\.]+@{1}[\w\-\$\&]+\.{1}[\w\-\$\&]+\.{1}[\w\-\$\&]+\.{1}[\w\-\$\&]+$/;
	
	if (emailAddress !=""){
		if (!re.test(emailAddress) && !re1.test(emailAddress) && !re2.test(emailAddress)){
			return false;
		}
	}
	return true;
}
function isPassword(inString){
	var	regExp = /^[A-Za-z0-9`!@\$%\^&\*\(\)\-_=\+\[\];:\,<.>\?]{6,10}$/;

	var	bValid = regExp.test(inString);
	if (!bValid){
		return "The password can include only letters, numbers and the following special characters `!@$%^&*()-_=+[];:,<.>?.\nIt must be between 6 and 10 characters long, and spaces are not permitted.";
	}
	return "";
}

function isUserID(inString){
	var	regExp = /^[A-Za-z0-9\-_.]{6,16}$/;
	var	bValid = regExp.test(inString);
	if (!bValid){
		return "The User ID can include only letters, numbers, dashes, underscores and full stops.\nIt must be between 6 and 16 characters long, and spaces are not permitted.";
	}
	return "";
}

function isValidID(inString){
	var	regExp = /^[0-9]{1,7}$/;
	return regExp.test(inString);
}

function makeNewPassword(){
	var validChars = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
	var myChar
	var myPos
	var myPassword = ""
	for(i=0;i<8;i++){
		MyPos = parseInt(Math.random() * 32);
		MyChar = validChars.substring(MyPos,MyPos+1);
		myPassword = myPassword + MyChar;
	}
	return myPassword;
}
function jcbbsEncode(inString){
	// this version accepts ascii characters in the range 48-57, 64-90, 97-122
	// eg numbers and upper/lower case letters only
	// the output string will be within the same range
	
	// ensure all characters are within range
	var	regExp = /^[A-Za-z0-9]{1,50}$/;
	var	bValid = regExp.test(inString);
	if (!bValid){
		return 'Jcbbs_Range_Error';
	}

	var asciiValue
	var aLine = new Array();
	var aOutLine = new Array();
	var aFinal = new Array();

	for(i=0;i<inString.length;i++){
		asciiValue = inString.charCodeAt(i);
		if(asciiValue > 116){
			asciiValue -= 26;
		}
		if(asciiValue > 109){
			asciiValue -= 52;
		}
		aLine[i] = asciiValue
	}	
	
	aLine[i] = Math.floor(Math.random() * 62) + 47
	aLine[i+1] = Math.floor(Math.random() * 62) + 47
	
	var iSeed = 27
	var iPntr = -1
	var iRntr = -1
	var iTest = 0
	
	for(i=aLine.length -1;i> -1;i--){
		iPntr ++;
		iRntr ++;
		iTest = aLine[i] - iSeed;
		if(iTest < 48){
			iTest += 62;
		}
		if(iTest < 48){
			iTest +=62;
		}
		
		aOutLine[iPntr] = iTest;
		iSeed = iTest;
		if (iRntr ==8){
			iPntr ++;
			iRntr = 0;
			aOutLine[iPntr] = Math.floor(Math.random() * 62) + 47
		}
	}
	
	// second stage encrypt
	iSeed = 27
	iPntr = -1
	for(i=aOutLine.length-1;i> -1;i--){
		iPntr ++
		iTest = aOutLine[i] - iSeed;
		if(iTest < 48){
			iTest += 62;
		}
		if(iTest < 48){
			iTest +=62;
		}
		aFinal[iPntr] = iTest;
		iSeed = iTest;
	}
	var outString = '';
	for(i=0;i<aFinal.length;i++){
		iTest = aFinal[i];
		if (iTest > 57 && iTest < 65){
			iTest += 52;
		}
		if (iTest > 90 && iTest < 97){
			iTest += 26;
		}
		outString += String.fromCharCode(iTest);
	}
	return outString;
}

function jcbbsDecode(inString){
	// this version accepts ascii characters in the range 48-57, 64-90, 97-122
	// eg numbers and upper/lower case letters only
	// the output string will be within the same range
	
	// ensure all characters are within range
	var	regExp = /^[A-Za-z0-9]{1,50}$/;
	var	bValid = regExp.test(inString);
	if (!bValid){
		return 'Jcbbs_Range_Error';
	}

	var asciiValue
	var aLine = new Array();
	var aOutLine = new Array();
	var aFinal = new Array();

	for(i=0;i<inString.length;i++){
		asciiValue = inString.charCodeAt(i);
		if(asciiValue > 116){
			asciiValue -= 26;
		}
		if(asciiValue > 109){
			asciiValue -= 52;
		}
		aLine[i] = asciiValue
	}
	
	var iSeed = 27	
	
	for(i=0;i<aLine.length;i++){
		iTest = aLine[i] + iSeed;
		if(iTest > 109){
			iTest -= 62;
		}
		if(iTest > 109){
			iTest -=62;
		}
		aOutLine[i] = iTest;
		iSeed = aLine[i];
	}
	
	iSeed = 27
	var iPntr = -1

	for(i=aOutLine.length - 1;i> -1;i--){
		iPntr ++
		if (iPntr ==9){
			aFinal[i]= 999;
			iPntr = 0;
		} else {
			iTest = aOutLine[i] + iSeed;
			if(iTest > 109){
				iTest -= 62;
			}
			if(iTest > 109){
				iTest -=62;
			}
			aFinal[i] = iTest;
			iSeed = aOutLine[i] ;
		}
	}

	var outString = '';
	for(i=0;i<aFinal.length -2;i++){
		iTest = aFinal[i];
		if (iTest != 999){
			if (iTest > 57 && iTest < 65){
				iTest += 52;
			}
			if (iTest > 90 && iTest < 97){
				iTest += 26;
			}
			outString += String.fromCharCode(iTest);
		}
	}
	return outString;
}


