//STRING FUNCTIONS
//COPYRIGHT ALEXANDER BROUWER 2006
//UNAUTHORISED COPYING, DISTRIBUTION OR USE OF THIS SCRIPT IS PROHIBITED

function Trim(TextToTrim){
	//THIS FUNCTION REMOVES EXCESS WHITE SPACE FROM THE TextToTrim ARGUMENT
	
	while (TextToTrim.substring(0,1) == ' '){
		TextToTrim = TextToTrim.substring(1, TextToTrim.length);
	}
	
	while (TextToTrim.substring(TextToTrim.length - 1, TextToTrim.length) == ' '){
		TextToTrim = TextToTrim.substring(0, TextToTrim.length - 1);
	}

	return TextToTrim;
}

function LCase(Text){
	//THIS FUNCTION CONVERTS THE TEXT INTO LOWER CASE LETTERS
	var counter = 0;
	var newstring = "";
	var code = 0;
	
	for (counter=0; counter<Text.length; counter++){
		code = Text.charCodeAt(counter);
		if (code>=65 && code<=90){
			//WE NEED TO MAKE THE CHARACTER INTO A LOWER CASE
			newstring = newstring + String.fromCharCode(code + 32);
		}
		else{
			//WE NEED TO COPY THE CHARACTER THE WAY IT IS
			newstring = newstring + Text.charAt(counter);
		}
	}
	return newstring;
}

function UCase(Text){
	//THIS FUNCTION CONVERTS THE TEXT INTO UPPER CASE LETTERS
	var counter = 0;
	var newstring = "";
	var code = 0;
	
	for (counter=0; counter<Text.length; counter++){
		code = Text.charCodeAt(counter);
		if (code>=97 && code<=122){
			//WE NEED TO MAKE THE CHARACTER INTO A LOWER CASE
			newstring = newstring + String.fromCharCode(code - 32);
		}
		else{
			//WE NEED TO COPY THE CHARACTER THE WAY IT IS
			newstring = newstring + Text.charAt(counter);
		}
	}
	return newstring;
}

function CheckEmailAddress(EmailAddressToCheck){
	//THIS FUNCTION RETURNS TRUE IF THE EMAIL ADDRESS IS VALID AND FALSE OTHERWISE
	var counter = 0;
	var location = 0;
	var temptext = "";
		
	//TRIM THE STRING
	EmailAddressToCheck = Trim(EmailAddressToCheck);
	
	//CHECK THAT THERE IS A STRING THERE
	if (EmailAddressToCheck.length==0){
		return false;
	}
	
	//CHECK TO SEE IF ANY INVALID CHARACTERS EXIST
	if (EmailAddressToCheck.indexOf('/')!=-1 || EmailAddressToCheck.indexOf(':')!=-1 || EmailAddressToCheck.indexOf(',')!=-1 || EmailAddressToCheck.indexOf(';')!=-1){
		return false;
	}
	
	//LOOK FOR THE @ SYMBOL
	location = EmailAddressToCheck.indexOf('@');
	//CHECK TO SEE THAT THE @ EXISTS AND THAT IT ISN'T AT THE START OF END OF THE ADDRESS
	if (location==-1 || location==EmailAddressToCheck.length-1 || location==0){
		return false;
	}

	var splittext = EmailAddressToCheck.split('@');
	//CHECK THAT WE HAVE ONLY TWO ELEMENTS IN THE ARRAY (I.E. NOT MORE THAN ONE @)
	if (splittext.length != 2){
		return false;
	}
	
	temptext = splittext[1];
	
	//CHECK THAT THE DOT EXISTS, AND NOT AT THE START OR THE END OF THE TEXT
	location = temptext.indexOf('.');
	if (location==0 || location == temptext.length - 1){
		return false;
	}
	
	//CHECK THAT THERE IS NOT DOT AT THE END
	if (temptext.charAt(temptext.length-1)=='.'){
		return false;
	}
	
	//CHECK THAT NO TWO DOTS ARE NEXT TO EACH OTHER
	for (counter=0; counter<EmailAddressToCheck.length-1; counter++){
		if (EmailAddressToCheck.charAt(counter)=='.'){
			//CHECK TO SEE IF THE NEXT CHARACTER IS A DOT OR THE @ SYMBOL
			if (EmailAddressToCheck.charAt(counter+1)=='.' || EmailAddressToCheck.charAt(counter+1)=='@'){
				return false;
			}
		}
	}
	
	//IF WE GET TO THIS POINT THEN THE ADDRESS IS VALID
	return true;

}

function IsNumeric(TextToCheck){
	//THIS FUNCTION RETURNS TRUE IF THE STRING IS A VALID NUMBER AND FALSE OTHERWISE
	var counter = 0;
	var validchars = "-0123456789.";
	var isnumber = true;
	var char = "";
	var dotcount = 0;
	var barcount = 0;
		
	//REMOVE ANY TRAILING SPACES
	TextToCheck = Trim(TextToCheck);
		
	for (counter=0; counter<TextToCheck.length && isnumber==true; counter++){
		char = TextToCheck.charAt(counter);
		//SEE IF THE CHARACTER IS IN THE OK LIST
		if (validchars.indexOf(char) == -1){
			isnumber=false;
		}
		if (char == '.'){
			dotcount++;
		}
		if (char == '-'){
			barcount++;
		}
	}
	
	//CHECK THAT WE HAVE ONLY ONE OR NO DOTS
	if (dotcount>1){
		return false;
	}
	if (dotcount==1 && TextToCheck.length==1){
		return false;
	}
	//CHECK TO SEE IF THE NUMBER IS NEGATIVE AND IF SO THAT THE NEGATIVE SYMBOL IS AT THE START OF THE 
	//STRING
	if (barcount>1){
		return false;
	}
	if (barcount!=0 && TextToCheck.charAt(0)!='-'){
		return false;	
	}
	if (barcount==1 && TextToCheck.length==1){
		return false;
	}
	
	//CHECK THAT THE VALUE ISN'T JUST A DOT BY ITSELF

	return isnumber;
}
	
function IsWholeNumber(ValueToCheck){
	//RETURNS TRUE IF A NUMBER IS A WHOLENUMBER AND FALSE OTHERWISE
	var counter = 0;
	if (IsNumeric(ValueToCheck)==false){
		return false;
	}
	for (counter=0;counter<ValueToCheck.length;counter++){
		if (ValueToCheck.charAt(counter)=='.'){
			return false;
		}
	}
	
	//IF WE GET TO THIS POINT THEN THE VALUE IS A WHOLE NUMBER
	return true;
}

function Round(Value, DecimalPlaces){
	//ROUNDS A GIVEN NUMBER TO THE SPECIFIED NUMBER OF DECIMAL PLACES	
	if (IsNumeric(Value)==true){
		Value = Value * 1;
		return Value.toFixed(DecimalPlaces);
	}
	else{
		return "ERROR"	
	}
}

function RemoveNonNumericCharacters(TextToAdjust){
	//REMOVES ANY NON-NUMERIC CHARACTERS
	//THIS FUNCTION RETURNS TRUE IF THE STRING IS A VALID NUMBER AND FALSE OTHERWISE
	var counter = 0;
	var validchars = "0123456789.-";
	var char = "";
	var dotcount = 0;
	var barcount = 0;
	var newstring = "";
	
	for (counter=0; counter<TextToAdjust.length; counter++){
		char = TextToAdjust.charAt(counter);
		//SEE IF THE CHARACTER IS IN THE OK LIST
		if (validchars.indexOf(char) != -1 && dotcount<=1 && barcount<=1){
			//IF WE ARE ADDING A BAR MAKE SURE WE REMOVE IT FROM ANY PLACE BUT THE START
			if (char=='-' && counter==0 || char!='-'){
				newstring = newstring + char;				
			}
		}
		if (char == '.'){
			dotcount++;
		}
		if (char == '-'){
			barcount++;
		}
	}
	
	//IF THE STRING IS JUST A SINGLE DOT OR BAR THEN REMOVE IT
	if (newstring.length==1 && (newstring=='.' || newstring=='-')){
		return "";
	}
	return newstring;
}

function MakePositiveNumber(Value){
	//MAKES THE NUMBER POSITIVE (REMOVE AN NON NUMERIC CHARACTERS)
	//REMOVE NON NUMERIC CHARACTERS

	Value = RemoveNonNumericCharacters(Value);
	
	if (Value.length==0){
		return;
	}
	
	var stringarray = Value.split('-');
	
	return stringarray[1];
}
	
function FormatCurrency(Text, FormatType){
	var symbol = "";
	var country = navigator.userLanguage;
	var amount = 0;
	
	//FORMATS THE NUMBER INTO A CURRENCY STRING.  SUPPORTS AUTOMATIC DETECTION OF CURRENCY
	////////////////////////////////////////////////////
	//               FORMAT TYPE VALUES               //
	////////////////////////////////////////////////////
	// VALUE		RESULT							  //
	//================================================//
	//   0			Script automatically detects the  //
	//				most appropriate currency.		  //
	//   1			Script uses '$'					  //
	//   2			Script uses pound symbol		  //
	//   3			Script uses euro symbol			  //
	//   4			Script uses yen symbol			  //
	//   5			Script uses yuan symbol			  //
	////////////////////////////////////////////////////
	
	switch (FormatType){
		case 1:
			//USE THE DOLLAR SYMBOL	
			symbol = '$';
			break;
		case 2:
			//USE THE POUND SYMBOL
			symbol = '\u00a3';
			break;
		case 3:
			//USE THE EURO SYMBOL
			symbol = '\u20ac';
			break;
		case 4:
			//USE THE YEN SYMBOL
			symbol = '\u00a5';
			break;
		case 5:
			//USE THE YUAN SYMBOL
			symbol = '';
			break;
		default:
			//USE THE DEFAULT SYMBOL
			symbol = '$';
	}
	
	//CHECK THAT THE VALUE IS A NUMBER
	if (IsNumeric(Text)==false){
		return "";
	}
	
	//CONVERT THE TEXT INTO A NUMBER
	amount = Text * 1;
	
	return symbol + amount.toFixed(2);

}

function CheckQuantityTextBox(TextBox){
	//THIS FUNCTION CHECKS TO SEE THAT THE GIVEN TEXT BOX CONTAINS A VALID QUANTITY VALUE - IF IT IS INVALID
	//IT WILL REMOVE INVALID CHARACTERS AND INFORM THE USER
	//CHECK TO SEE THAT THE VALUE IS A WHOLE NUMBER
	//TRIM ANY BLANK SPACE
	TextBox.value = Trim(TextBox.value);
	//CHECK THAT THERE IS SOMETHING IN THE TEXT BOX
	if (TextBox.value==""){
		return;
	}
	if (IsNumeric(TextBox.value)==false){
		window.alert('The value that you have entered into the quantity text box is not valid.');
		TextBox.value=RemoveNonNumericCharacters(TextBox.value);
		return;
	}
	if (IsWholeNumber(TextBox.value)==false){
		window.alert('The value you have entered is not a whole number.  The decimal point has been removed.');
		TextBox.value = Round(TextBox.value, 0);
		return;
	}	
	if (TextBox.value<0){
		window.alert('You cannot order a negative amount.');
		TextBox.value = MakePositiveNumber(TextBox.value);
	}
}
			