var xmlObject = GetXmlHttpObject();
var ajaxUrl = "http://customers.ilisys.com.au/greenft/ajaxIndex.php";
//Form validation function
function validateMandatoryFields(formobj,fieldRequired,fieldDescription)
{
	var alertMsg = "The following fields must be entered before submitting this form:\n";
	var l_Msg = alertMsg.length;
	var errorElements = new Array();
	changeStars(fieldRequired, "hidden");
	for (var i = 0; i < fieldRequired.length; i++)
	{
		var obj = formobj.elements[fieldRequired[i]];
		var errorField = new Array();
		if (obj)
		{
			switch(obj.type)
			{
				case "select-one":
					if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""|| obj.options[obj.selectedIndex].value == "")
					{
						alertMsg += " - " + fieldDescription[i] + "\n";
						errorField[0] = fieldRequired[i];
						errorElements = errorElements.concat(errorField);
					}
				break;
				case "select-multiple":
					if (obj.selectedIndex == -1)
					{
						alertMsg += " - " + fieldDescription[i] + "\n";
						errorField[0] = fieldRequired[i];
						errorElements = errorElements.concat(errorField);
					}
				break;
				case "text":
				case "textarea":
					if (obj.value == "" || obj.value == null)
					{
						alertMsg += " - " + fieldDescription[i] + "\n";
						errorField[0] = fieldRequired[i];
						errorElements = errorElements.concat(errorField);
					}
				break;
				case "checkbox":
					if(!obj.checked)
					{
						alertMsg += " - " + fieldDescription[i] + "\n";
						errorField[0] = fieldRequired[i];
						errorElements = errorElements.concat(errorField);
					}
					break;
				default:
					if (obj.value == "" || obj.value == null)
					{
						if(obj.length >0)
						{
							var pass=false;
							for (var x = 0; x < obj.length; x++)
							{
								if (obj[x].checked)
								{
									pass = true;
									break;
								}
							}
						}
						else 
						{
							pass = false;
						}
						if (pass == false)
						{
							alertMsg += " - " + fieldDescription[i] + "\n";
							errorField[0] = fieldRequired[i];
							errorElements = errorElements.concat(errorField);
						}
					}
			}
		}
	}
		
	//Process special fields
	var strContinue = "true";
	if (alertMsg.length == l_Msg)
	{
		var errorMsg = "The following problems must be fixed before submitting this form\n";		
		//Process Email address
		if(formobj.email)
		{
			if(validateEmail(formobj.email.value))
			{
				if(!checkEmail(formobj.email.value))
				{
					strContinue = "true";
				}
				else
				{
					strContinue = "false";
					errorMsg += "- Email address entered already exists\n";
				}
			}
			else
			{
				strContinue = "false";
				errorMsg = "- Email address is not valid\n";
			}
		}			
		if(strContinue == "false")
			document.getElementById('emailError').className = 'error';
		if(formobj.username)
		{
			if(!checkUsername(formobj.username.value))
			{
				strContinue = "true";
			}
			else
			{
				strContinue = "false";
				errorMsg += "- Username entered already exists";
			}
		}
		if(strContinue == "false")
			document.getElementById('usernameError').className = 'error';
	}
	if(alertMsg.length != l_Msg)
	{
		changeStars(errorElements, "error");
		//Display the error message  
		alert(alertMsg);
		return false;
	}
	if(strContinue == "false")
	{
		alert(errorMsg);
		return false;
	}
}
function changeStars(errorElements, cssClass)
{
	//changes the error stars in the form according to the css class sent, errorElements is array containing stars to change
	for (var j = 0; j < errorElements.length; j++)
	{
		var stuff = document.getElementById(errorElements[j] + "Error").className;
		document.getElementById(errorElements[j] + "Error").className = cssClass;
	}
}
/*	changes the content of login form when forgot password is clicked	*/
function stateChanged() 
{
	if (xmlObject.readyState==4 || xmlObject.readyState=="complete")
 	{ 
		document.getElementById('topLogin').innerHTML = xmlObject.responseText;
 	}
}
/*	gets the correct login form	*/
function getPasswordChangeFields(whatForm, errorMessage)
{
	switch(whatForm)
	{
		//gets forgot password form
		case 'getPassForm':
			var queryString = "?action=getForm&form=getPassword";
			queryString += (errorMessage != '')?'&error='+errorMessage:'';
		break;
		//gets standard form
		case 'getStdForm':
			var queryString = "?action=getForm&form=getStdForm";
			queryString += (errorMessage != '')?'&error='+errorMessage:'';
		break;
	}
	//send request to server, using querystring created above
	xmlObject.open("GET", ajaxUrl + queryString,true);
	xmlObject.onreadystatechange=stateChanged;
	xmlObject.send(null);
}
function getPassword()
{
	var email = document.getElementById('emailAddress').value;
	var queryString = "?action=getPassword&email=" + email;
	//sends request to server, asynchronous is set to false since we are checking the form
	//and we dont want the rest of the script to run while checking
	xmlObject.open("GET", ajaxUrl + queryString,false);
	xmlObject.send(null);
	//if password was succesfully sent
	if(xmlObject.responseText == 'sent')
	{
		getPasswordChangeFields('getStdForm', '<p class=error>Password is sent</p>');
	}
	else
	{
		//password not sent, set email error and display error paragraph
		document.getElementById('emailError').innerHTML = xmlObject.responseText;
		document.getElementById('emailError').className = "error";
	}
}
/*checks if username has already been entered into the database*/
function checkUsername(username)
{
	var queryString = "?action=checkUsername&username=" + username;	
	xmlObject.open("GET",ajaxUrl + queryString,false);
	xmlObject.send(null);
	
	//Has been returning true when it shouldn't be so just default to true for the moment.
	//return false;
	
	if(xmlObject.responseText == "true")
	{
		//email address exists
		return true;
	}
	else if(xmlObject.responseText == "false")
	{
		//email address does not exist
		return false;
	}
	else
	{
		//unexpected error occured, do not allow page to run
		return true;
	}
}
/*checks if the email has already been entered into the database*/
function checkEmail(emailAdress)
{
	var queryString = "?action=checkEmail&email=" + emailAdress;	
	xmlObject.open("GET",ajaxUrl + queryString,false);
	xmlObject.send(null);
	if(xmlObject.responseText == "true")
	{
		//email address exists
		return true;
	}
	else if(xmlObject.responseText == "false")
	{
		//email address does not exist
		return false;
	}
	else
	{
		//unexpected error occured, do not allow page to run
		return true;
	}
}
/*checks if the email address is a valid email address*/
function validateEmail(email) 
{
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(email))
		return false;
	else
		return true;
}
/*Not tested*/
function getQueryValue(value)
{
	var queryString = window.location.search;
	var vars = queryString.split("&")
	for( var i = 0; i<vars.length; i++)
	{
		var queryValue = vars[i].split("=");
		if(queryValue[0] == value)
		{
			return queryValue[1];
			break;
		}
	}
}
function GetXmlHttpObject()
{
	var xmlHttp=null;
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}