/**
 *
 * 12/08/2008 Charles Bajomo	Added test for country element in form.
 *
 * $Id: submitForm.js 1263 2008-08-12 15:19:04Z charles $
 */

/**
 * global variables
 */
var fields = new Array("firstName", "lastName", "company", "email", "password", "password2","country");
var fieldInfo = new Array("First name", "Surname", "Company name", "Email", "Password","Confirm Password","Country");
var msg = "Please fill in the following fields:<br/><br/>";

/**
 * registration callback class
 */
var powRegister = {

	handleSuccess:function(o){

		result = eval('('+o.responseText+')');
		if (result.status == 201)
		{
			if (result.Invitee == false)
			{
				if ( (result.message == "EXISTS") && result.hasYuuguu == "Y")
				{
					MessageBox("Already Registered","You already have an account. You will be redirected to the download page",null,[ { text:"Ok", handler:function(){this.hide();document.getElementById('submitBox').className = '';window.location=clientDownlaodUrl}, isDefault:true } ]);
				}
				else
				{
					regYuuguuAccount(result.email,result.name,result.pin,result.password);
				}
			}
			else // this customer was invited from inside the yuuguu client
			{
				if (result.message == "EXISTS")
				{
					MessageBox("Already Registered","You already have an account. You will be redirected to the download page",null,[ { text:"Ok", handler:function(){this.hide();document.getElementById('submitBox').className = '';window.location=clientDownlaodUrl}, isDefault:true } ]);
				}
				else
				{
					postKeys = new Array();
					postKeys[0] = "name";
					postKeys[1] = "password";
					postKeys[2] = "pin";

					postValues = new Array();
					postValues[0] = result.name;
					postValues[1] = result.password;
					postValues[2] = result.pin;

					updateYuuguuAccount(postKeys,postValues,result.email);
				}
			}

		}
		else
		{
			MessageBox("Error",result.message,null,[ { text:"Ok", handler:function(){this.hide();document.getElementById('submitBox').className = '';}, isDefault:true } ]);
		}

	},

	handleFailure:function(o){
		ldpanel.hide();
		// Failure handler
		MessageBox("Connection Error","Internal Server Error.",null,[ { text:"Ok", handler:function(){this.hide();document.getElementById('submitBox').className = '';}, isDefault:true } ]);
	},

	startRequest:function(form) {
		YAHOO.util.Connect.setForm(form);
		YAHOO.util.Connect.asyncRequest('POST', serverUrl+'contact.php', powRegisterCallback);
	}

};

var powRegisterCallback =
{
	success:powRegister.handleSuccess,
	faliure:powRegister.handleFailure,
	scope:powRegister
};

/**
 * Register user with a powownow Pin and a yuuguu account
 */

function submitForm() {
	newRegistration = true;
	sendResult = false;
	document.getElementById('submitBox').className = 'submitBox';
	sendResult = validateForm(document.getElementById('registerPin'), 1);
	if (sendResult) {
		powRegister.startRequest(document.getElementById('registerPin'));
		ldpanel = loadingPanel('../images/general/loading.gif');
	} else {
		document.getElementById('submitBox').className = '';
	}
}

function validateForm(f, highLight)
{
	var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
	var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";
	var reg3str = "[0-9]";
	var reg1 = new RegExp(reg1str);
	var reg2 = new RegExp(reg2str);
	var reg3 = new RegExp(reg3str);
	var reqFields = "";

	//style information for valid and invalid form elements
	var defStyle = "reqField";
	var altStyle = "reqFieldError";

	//default value for PIN numer
	var pinLength = 6;

	//array to style elements
	var labelStyle = new Array(fields.length);

	//itterate through each of the form fields to be validated
	for(i=0;i<fields.length;i++)
	{
		//for text and textarea form types perform the following validation
		if(f.elements[fields[i]].type == "text" || f.elements[fields[i]].type == "textarea" || f.elements[fields[i]].type == "password")
		{
			// if email, compare against regular expressions
			if(fields[i] == "email")
			{
				// retain the value of the email in a variable
				var strEmail = f.elements[fields[i]].value;
				// checks to make sure the email address is valid and sets appropriate style.
				if (!reg1.test(strEmail) && reg2.test(strEmail))
				{
					labelStyle[i] = defStyle;
				}
				else
				{
					labelStyle[i] = altStyle;
					reqFields += "<label style=color:red>"+fieldInfo[i]+"</label><br/>"
				}
			}
			else if(fields[i] == "password2")
			{
				var strpasswdConfirm = f.elements[fields[i]].value;
				var strpasswd = f.elements['password'].value;

				if (strpasswdConfirm == strpasswd)
				{
					labelStyle[i] = defStyle;
				}
				else if (strpasswdConfirm != strpasswd)
				{
					labelStyle[i] = altStyle;
					reqFields += "<label style=color:red>"+fieldInfo[i]+" <i>(Doesn't Match)</i></label><br/>"
				}
				else
				{
					labelStyle[i] = altStyle;
					reqFields += "<label style=color:red>"+fieldInfo[i]+"</label><br/>"
				}
			}
			else if(fields[i] == "password")
			{
				var strpasswd = f.elements[fields[i]].value;

				if(strpasswd.length >= 6)
				{
					labelStyle[i] = defStyle;
				}
				else
				{
					labelStyle[i] = altStyle;
					reqFields += "<label style=color:red>"+fieldInfo[i]+" should be at least 6 characters</label><br/>"
				}
			}
			else if(fields[i] == "pin")
			{
				//validate a numeric PIN for length and content
				var strPin = f.elements[fields[i]].value;
				if((strPin.length != pinLength && strPin.length != 0) || (!reg3.test(strPin) && strPin.length != 0))
				{
					labelStyle[i] = altStyle;
					reqFields += "<label style=color:red>"+fieldInfo[i]+"</label><br/>";
				}
				else
				{
					labelStyle[i] = defStyle;
				}
			}
			else
			{
				//general form fields, just looking for a length greater than 0
				if (f.elements[fields[i]].value.length == 0)
				{
					labelStyle[i] = altStyle;
					reqFields += "<label style=color:red>"+fieldInfo[i]+"</label><br/>";
				}
				else
				{
					labelStyle[i] = defStyle;
				}
			}
		}
		else if ((f.elements[fields[i]].name == "country") && ((f.elements[fields[i]]. value == "none") || (f.elements[fields[i]]. value == "")))
		{
			labelStyle[i] = altStyle;
			reqFields += "<label style=color:red> Please select a "+fieldInfo[i]+"</label><br/>";
		}
	}

	// Handle required fields and display as appropriate
	if(reqFields.length > 0)
	{
		//two types of display either highLight or alert
		if(highLight == 1)
		{
			for(var i=0;i<fields.length;i++)
			{
				f.elements[fields[i]].className = labelStyle[i];
			}
		}
		MessageBox("Form Validation Error",msg+reqFields,null,[ { text:"Ok", handler:function(){this.hide();}, isDefault:true } ]);
		return false;
	}
	else
	{
		return true;
	}
}