//
//
//=====================================================================================================

function checkRegisterStep1(form){
	// Form variables to check
	var firstname = form.firstname.value
	var surname = form.surname.value
	var username = form.username.value
	var password = form.password.value
	var confirmation = form.confirmation.value
	var email = form.email.value
	var organisationname=form.organisationname.value
	var position = form.position.options[form.position.selectedIndex]
	var positionother = form.otherposition.value
	var organisationtype = form.organisationtype.options[form.organisationtype.selectedIndex]
	var organisationother = form.otherorganisation.value
	// variables
	var msg = ""
	
	// Validate firstname ------------------------------------------------
	if (firstname.length < 2){
		msg += "Your first name must contain at least 2 characters.\n"
	}
	else if (!checkStringValidCharacters(firstname,"alpha")){
		msg += "Your first name can contain letters only.\n"
	}
	
	// Validate surname --------------------------------------------------
	if (surname.length < 2){
		msg += "Your surname must contain at least 2 characters.\n"
	}
	else if (!checkStringValidCharacters(surname,"alpha")){
		msg += "Your surname can contain letters only.\n"
	}
	
	// Validate email
	if (checkEmail(email)!=true){
		msg += checkEmail(email)
	}
	//	
	// Validate username
	if (checkUsername(username,20,5)!=true){
		msg += checkUsername(username,20,5)
	}
	else{
		if (!isUsernameUnique(username,takenusernamelist)){
			msg += "The username you have chosen is taken. Please choose another.\n"
		}
	}
	
	// Check password
	if (checkPassword(password,confirmation,20,5)!=true){
		msg += checkPassword(password,confirmation,20,5)
	}
	if (msg==""){
		return true
		}
	else{
		alert(msg)
		return false
		}
}


//=========================================================================================================
/** Validating the password reminder form */
function checkPasswordReminder(form){
	// Form variables to check
	var firstname = form.firstname.value
	var surname = form.surname.value
	var email = form.email.value
	// variables
	var msg = ""
	
	// Validate firstname ------------------------------------------------
	if (firstname.length < 2){
		msg += "Your first name must contain at least 2 characters.\n"
	}
	else if (!checkStringValidCharacters(firstname,"alpha")){
		msg += "Your first name can contain letters only.\n"
	}
	
	// Validate surname --------------------------------------------------
	if (surname.length < 2){
		msg += "Your surname must contain at least 2 characters.\n"
	}
	else if (!checkStringValidCharacters(surname,"alpha")){
		msg += "Your surname can contain letters only.\n"
	}
	
	// Validate email
	if (email.length > 0 && email != ""){
		if (checkEmail(email)!=true){
			msg += checkEmail(email)
		}
	}
	if (msg==""){
		return true
		}
	else{
		alert(msg)
		return false
		}
}
/**********************************************************************************************************************/

function isUsernameUnique(username,usernamelist){
	for (var i=0; i<usernamelist.length; i++){
		if (username == usernamelist[i]){
			return false
		}
	}
	return true
}

//=========================================================================================================
function checkEmail(email){
	var msg=""
	var invalidChars="/:,; ";
	var position=email.indexOf("@");
	var periodPos=email.indexOf(".",position);
	var errorFlagB
	var errorFlag

	if (email==""){
		msg=msg+"You must enter an email address.\n";
		errorFlag=false;
	}	else if (email.length<6){
		msg=msg+"Your email address must be at least 6 characters long.\n";
		errorFlag=false;
	}	else if (position==-1){
		msg=msg+"Your email address must contain a '@' character.\n";
		errorFlag=false;
	}	else if ((email.indexOf("@",(position+1)))!=-1){
		msg=msg+"You can only have one '@' character in your email address.\n";
		errorFlag=false;
	}	else if ((position==0)||(position==(email.length-1))){
		msg=msg+"You can't have the '@' character as the first or\n"+
		"last character in your email address.\n";
		errorFlag=false;
	}	else if ((periodPos==-1)||((periodPos+3)>email.length)){
		msg=msg+"The name of your mail server must have a '.com' (or similar) extension.\n";
		errorFlag=false;
	}	
	
	for (i=0;i<invalidChars.length;i++){
		badChar=invalidChars.charAt(i);
		if (email.indexOf(badChar,0)!=-1){
			errorFlagB=true;
			}
		}
					
	if (errorFlagB==true){
		msg=msg+"Your email address contains invalid character(s) (ie. / : , ; space)\n";
		errorFlag=false;
		}
		
	if (errorFlag==false){
		return msg
		}
	else
		return true
}

//=========================================================================================================
function checkEmailHelp(email){
	var msg=""
	var invalidChars="/:,; ";
	var position=email.indexOf("@");
	var periodPos=email.indexOf(".",position);
	var errorFlagB
	var errorFlag

	if (email==""){
		msg=msg+"You must enter an email address.\n";
		errorFlag=false;
	}	else if (email.length<6){
		msg=msg+"Your email address must be at least 6 characters long.\n";
		errorFlag=false;
	}	else if (position==-1){
		msg=msg+"Your email address must contain a '@' character.\n";
		errorFlag=false;
	}	else if ((email.indexOf("@",(position+1)))!=-1){
		msg=msg+"You can only have one '@' character in your email address\n";
		errorFlag=false;
	}	else if ((position==0)||(position==(email.length-1))){
		msg=msg+"You can't have the '@' character as the first or\n"+
		"last character in your email address.\n";
		errorFlag=false;
	}	else if ((periodPos==-1)||((periodPos+3)>email.length)){
		msg=msg+"The name of your mail server must have a '.com' (or similar) extension.\n";
		errorFlag=false;
	}	
	
	for (i=0;i<invalidChars.length;i++){
		badChar=invalidChars.charAt(i);
		if (email.indexOf(badChar,0)!=-1){
			errorFlagB=true;
			}
		}
					
	if (errorFlagB==true){
		msg=msg+"Your email address contains invalid character(s) (ie. / : , ; space)\n";
		errorFlag=false;
		return false
		}
		
	if (errorFlag==false){
		alert(msg)
		return false
		}
	else
		return true
}

//====================================================================================================
function checkPassword(password,confirmation,maxlength,minlength){
	var msg=""
	var passwordError = false

	if(password==""){
		passwordError=true
		msg+="You must enter a password.\n"
		}
	else if(password.length < minlength){
		passwordError=true
		msg+="Password must be at least "+minlength+" characters long.\n"
		}
	else if(password.length>maxlength){
		passwordError=true
		msg+="Password cannot be greater than "+maxlength+" characters long.\n"
		}
	else if(checkStringValidCharacters(password,"alphanumeric")==false){
		passwordError=true
		msg+="Password can contain letters or numbers only.\n"
		}
	else if(password != confirmation){
		passwordError=true
		msg+="Your password and confirmation do not match.\n"
		}
	
	if(passwordError==true)
		return msg
	else
		return true
}

//====================================================================================================
function checkUsername(text,maxlength,minlength){
	var msg=""
	var usernameError=false
	var username=trim(text)
	
	if(username==""){
		usernameError=true
		msg+="You must enter a username.\n"
		}
	else if(username.length < minlength){
		usernameError=true
		msg+="Your user name must be at least "+minlength+" characters long.\n"
		}
	else if(username.length>maxlength){
		usernameError=true
		msg+="Your user name cannot be greater than "+maxlength+" characters long.\n"
		}
	else if(isAlphaNumeric(username)==false){
		usernameError=true
		msg+="Your user name can contain letters or numbers only.\n"
		}
	
	if(usernameError==true)
		return msg
	else
		return true
}
//====================================================================================================
// Checks if a string is alphanumeric, returns true or false 
function checkStringValidCharacters(string,charlist){
		
	var isValid=true
	string=string.toLowerCase()
	charlist = charlist=="alpha"?"abcdefghijklmnopqrstuvwxyz":charlist ;
	charlist = charlist=="alphanumeric"?"abcdefghijklmnopqrstuvwxyz1234567890":charlist ;
	total:
	
	// compare each letter of string with each character in charlist, set flag 
	for (i=0;i<string.length;i++){
		for(j=0;j<charlist.length;j++){
			if (string.charAt(i)==charlist.charAt(j)){
			    isValid=true
				break;
			}
			else{
				isValid=false
			}
		}
	}
	return isValid
}
//====================================================================================================
// Checks if a string is alphanumeric, returns true or false 
function isNumeric(text){
	var t=trim(text)
	//if (t=="")
		//return false
		
	var isLetter=true
	t=t.toLowerCase()

    var alpha="1234567890"
	
	// compare each letter of string with letters of alphabet, set flag 
	for (i=0;i<t.length;i++){
		for(j=0;j<alpha.length;j++){
			alphaChar=alpha.charAt(j);
			if (t.charAt(i)==alphaChar){
			    isLetter=true
				break;
			}
			else{
				isLetter=false
			}
		}
		if(isLetter==false)
		 	return false
	}
	return isLetter
}
//====================================================================================================
// Checks if a string is alphanumeric, returns true or false 
function isAlphaNumeric(text){
	var t=trim(text)
	//if (t=="")
		//return false
		
	var isLetter=true
	t=t.toLowerCase()

    var alpha="abcdefghijklmnopqrstuvwxyz1234567890"
	
	// compare each letter of string with letters of alphabet, set flag 
	for (i=0;i<t.length;i++){
		for(j=0;j<alpha.length;j++){
			alphaChar=alpha.charAt(j);
			if (t.charAt(i)==alphaChar){
			    isLetter=true
				break;
			}
			else{
				isLetter=false
			}
		}
		if(isLetter==false)
		 	return false
	}
	return isLetter
}

//====================================================================================================
// Trims white space from both sides of a string and returns the trimmed string
function trim(text){

	var start=0
	var leftTrim=""
	var fullTrim=""
	var end=0
	var isAllSpaces
	
	// Check if entire string is spaces
	for(w=0;w<text.length;w++){
		if(text.charAt(w)==" "){
			isAllSpaces=true
		}
		else{
			isAllSpaces=false
			break
			}
	}
	
	// If string is all spaces return zero length string 
	if (isAllSpaces==true){
		var x=""
		return x
		}

	// If the string is not all spaces then perform trim of white space
	 
	// Perform a left trim
	// Find position first real char appears in string
	for(i=0;i<text.length;i++){
		if(text.charAt(i)!=" "){
			start=i
			break
		}
	}

	// Extract the string to the right of start
	for(i=start;i<text.length;i++){
		leftTrim+=text.charAt(i)
	}
	
	//perform right trim
	for(i=leftTrim.length-1;i>=0;i--){          // -1 is for end of string
		if(leftTrim.charAt(i)!=" "){
			end=i
			break
		}
	}

	// Extract the string to the left of start
	for(i=0;i<=end;i++){
		fullTrim+=leftTrim.charAt(i)
	}
	return fullTrim
}

/**
   compareNum(num1.num2
		param: num1, num 2
		returns:  -1 -> num1 < num2
									0 -> num1 == num2
								 1 ->num1 > num2
*/
function compareNum(num1, num2){
	
	if(num1 < num2) return -1;
	if(num1== num2) return 0;
	if(num1 > num2) return 1;
	
	return;
}
/**
validateDateFilterSelection
params:startMonth,startYear,endMonth,endYear
returns: eroor message
**/
function validateDateFilterSelection(startMonth,startYear,endMonth,endYear){
	var _errorMessage ="";
	
	switch(compareNum(startYear,endYear)){
	
		case 0:				
			 if(compareNum(startMonth,endMonth) == 1){
				 _errorMessage ="Please enter a valid date.";
				_errorMessage += "\nThe end month should be greater than or equal  the start month"; 
				}
				break;
	case 1:
				_errorMessage ="Please enter a valid date.";
			 if(compareNum(startMonth,endMonth) == 1){
				_errorMessage += "\nThe end month should be greater than or equal the start month"; 
				}
				_errorMessage  +="\nThe end year should be greater than or equal the start year."
		break;
	
	default:
	break;
	}
	

	
	return _errorMessage;
}
//====================================================================================================
// Checks if form is in 8.3 format
function checkFilename(form){
	var filename = form.newfilename.value
	var formpassed = true
	var msg=""
	
	if(filename.length > 12){
		formpassed = false
	}
	
	if(filename.length < 7){
		formpassed = false
	}
	
	var dotcount = 0
	for (var i=0; i < filename.length; i++){
		if (filename.charAt(i)=="."){
			dotcount++
		}
	}	
	if(dotcount!=1){
		formpassed = false
	}
	
	// Check filename for alphanumeric characters and "."
	var isAlpaNumeric=true
	t=filename.toLowerCase()
	var alphaChar = ""
    var alpha="abcdefghijklmnopqrstuvwxyz1234567890."
	
	// compare each letter of string with letters of alphabet, set flag 
	for (var x=0;x<t.length;x++){
		for(var j=0;j<alpha.length;j++){
			alphaChar=alpha.charAt(j);
			if (t.charAt(x)==alphaChar){
			    isAlpaNumeric=true
				break;
			}
			else{
				isAlpaNumeric=false
			}
		}
		if(!isAlpaNumeric){
			msg += "Filename can only contain letters and numbers and a single '.' character.\n"
			formpassed = false
			break
		}
	}
	
	if (filename.charAt(filename.length-4)!="."){
		formpassed = false
	}
	
	if (formpassed){
		return true
		}
	else{
		alert("The filename must :\n\n- be less than 12 characters in length\n- be greater than 6 characters in length\n- only contain letters and numbers and a single '.' character\n- contain a 3 letter file extension.\n\neg. myfile.ext")
		return false
		}
}
//

// Checks that text fields have been completed 
	function checkTextAreaValue(formName,textFieldName){

		var userInput = eval('document.'+formName+'.'+textFieldName+'.value');
		var sendForm = true;
		var msg="";
		
		if (userInput == ""){
			msg += "Please enter a summary for this item.\n";
			sendform = false;
		}else{
			sendform = true;
		}
	//	
	//
		if (eval("document."+formName+".filecontents")){
			if(eval("document."+formName+".filecontents.value")!=""){
				var fileext;
				fileX = eval("document."+formName+".filecontents.value");
				filename = getFilenameFromPath(fileX);
				fileext = getExtensionFromFilename(filename)
			if ((fileext == "pdf")||(fileext == "doc")||(fileext == "docx")||(fileext == "ppt") ||(fileext == "pptx")||(fileext == "pps")||(fileext == "xls")||(fileext == "xlsx")||(fileext == "zip")){
					sendform = true;
				}
				else{
					sendform = false;
					msg += "\nPlease ensure that the file you are trying to upload is an Acrobat PDF, Word, Excel or Powerpoint document.\n";
				}
			
			}
			else{
				msg +='Please select a file.\n'
				sendform = false;
				}
		}
		
		//if there is a keyword field, validate that it has 4 words
		if(eval('document.'+formName+'.keywords')){
			var keywords = trim(eval('document.'+formName+'.keywords.value'));
			if(words(keywords,3)==true){
				sendform = true;
			}
			else{
				sendform = false;
				msg +='Please ensure you have entered at least 4 keywords.\n'
			}
		}//end if for keyword eval
		//	
		//
		
	//
	//  test for unchecked
		if (document.tsnform.tsncheckbox.checked==false){
		msg+='You must check me before uploading documentation.\n'
		sendform = false;
		//return false
		}
		//		
		//
		//
		//
		if (sendform == false){
			alert(msg)
			return false
		}
		else{
			return true
		}
	
}
//	
// Extracts the filename from a filepath
function getFilenameFromPath(filepath){
var temp = ""
var filename = ""

for (var i=filepath.length-1; i>=0; i--){
	if((filepath.charAt(i)!="\\")&&(filepath.charAt(i)!="/")){
		temp+=filepath.charAt(i)
	}
	else{
		break 
	}
}
// Reverse string
for(var t=temp.length-1; t>=0; t--){
	filename += temp.charAt(t)
}

return filename
}


// Checks that all fields have been completed
function checkOrder(form){

	var sendOrder=false
	var fail=true
	var length=form.length

	if (length == 1){
		if (form.courses.checked==false){
				fail=true
		}
		else
		{
				sendOrder=true
		}
	}
	else{
		for (i=0; i<length; i++){
			if (form.courses[i].checked==false){
				fail=true
			}
			else
			{
				sendOrder=true
			}
		}
	}
			
	if (sendOrder==false){
		alert ("Please select a course")
	}
	else{
		form.submit()
	}
}
// Extracts the extension from a filename
function getExtensionFromFilename(filename){
var fileext = ""
/*var extindex = filename.indexOf(".")+1
for(var u=extindex; u<filename.length; u++){
	if(filename.charAt(u)!="."){
		fileext += filename.charAt(u)
	}
	else{
		break
	}
}*/
var lastDot = filename.lastIndexOf('.');	
	fileext = filename.substring(lastDot+1, filename.length);
return fileext
}
//*******************************************************************************************************
// Extracts the name for the file from the filename
function getNameFromFilename(filename){
var filebody = ""
var extindex = 0

for(var v=0; v<filename.length; v++){
	if(filename.charAt(v)!="."){
		filebody += filename.charAt(v)
	}
	else{
		extindex = v+1
		break
	}
}
return filebody
}
//*******************************************************************************************************
// Check that a string has one '.'
function hasOneDot(str){
var dotcount = 0
for (var a=0; a<str.length; a++){
	if (str.charAt(a)=="."){
		dotcount++
	}
}
return dotcount==1? true:false
}
// Check that a string has number of required words(used for keyword searching)
function words(str,num){
var wordcount = 0
var commacount = 0
var comma = ","
//replace all commas with whitespace
var keywords = str;
for (var i=0; i<str.length; i++){
	if (str.charAt(i)==","){
		commacount++;
		keywords = keywords.replace(comma,"");
	}
}
//count whitespaces
for (var a=0; a<keywords.length; a++){
	if (keywords.charAt(a)==" "){
		wordcount++;
	}
	if(wordcount == num)
		break;
}
	return wordcount == num? true:false
}
//*******************************************************************************************************
// Check that a string has invalid characters
function hasInvalidCharacters(str){
var validchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-."
var isInvalid = false
for (var i=0; i<str.length; i++){
	if (validchars.indexOf(str.charAt(i))<0){
		isInvalid = true
		//alert(str.charAt(i))
		//alert(str + " " + str.charAt(i))
		break
	}
}
return isInvalid
}

//*******************************************************************************************************
// Searchs through an array of filenames for a given filename
function fileExists(filesArray,filename){
var foundfile = false
for (var i=0; i<filesArray.length; i++){
	if (filename==filesArray[i]){
		//alert(filename+" "+filesArray[i])
		foundfile = true
		break
	}
}
return foundfile
}

//declare regular expression
valTextArea = /^.+/;

function validateEmpty(formName,textName){
	var field=eval(formName+"."+textName);
	if (!(valTextArea.test(field.value)))
	{
		alert("You must enter a value.");
		field.focus();
		field.select();
		return false;
	}
	return true;	
}
