// Build 1900
/****************** Form funtions  **************/
var notify = true;
function processForm(form,type,onsuccess,onerror)
{
	var form = document[form];
	if(validateForm(form)){
		model.validation=new Array();
		var formData = form2Array(form);
		updateFormModel(formData,type);
		eval(onsuccess);
		return true;
	} else {
		var note='<div class="text oneline">Please check all the red fields.</div>';
		showNotification('error',note,4000);
		return false;
	}
}

function updateFormModel(array,type)
{
	switch(type){
		case "formAddress":
			for(i=0;i<array.length;i++){
				model.user[array[i][0]] = array[i][1];
			}		
			break;
		case "userRegInfo":	
		case "formRegAddress":
			for(i=0;i<array.length;i++){
				model.registration[array[i][0]] = array[i][1];
			}		
			break;
	}
}

function validateForm(form)
{
	var i;
	var checkToMake;
	var field;
	var success = true;
	var validation = model.validation;
	
	for(i=0;i<validation.length;i++){
		field = eval(validation[i][0]);
		if(!validateField(field,i,true)) success = false;
	}
	return success;
}

function validateField(field,i,suppress)
{
	if(!suppress)var supress=false;
	var result;
	var validation = model.validation;
	if(!i && i!=0){
		var field = 'document.'+field.form.name+'.'+field.name;
		for(j=0;j<validation.length;j++){
			if(validation[j][0]==field){
				var i = j;
				break;
			}
		}
	}
	var field = eval(validation[i][0]);
	var checkToMake = validation[i][1];
	var checkEmpty = validation[i][2];
	if(!i && i!=0) checkEmpty = false;

	switch(checkToMake){
		case "alpha":
			var result = isAlphaStr(field,checkEmpty,suppress);
			if(!supress&&!result){
				var note='<div class="text oneline">This field may only contain letters.</div>';
				showNotification('error',note,4000);
			}
			break;
		case "alphaNum":
			var result = isAlphaNumStr(field,checkEmpty,suppress);
			if(!supress&&!result){
				var note='<div class="text oneline">This field may only contain letters and numbers.</div>';
				showNotification('error',note,4000);
			}
			break;
		case "email":
			var result = isEmail(field,checkEmpty,suppress);
			if(!supress&&!result){
				var note='<div class="text oneline">Please enter a correct e-mail address.</div>';
				showNotification('error',note,4000);
			}
			break;
		case "passwordReg":
			var result = checkPasswordReg(field,suppress);
			if(!supress&&!result){
				var note='<div class="text oneline">Password and confirm password fields must be the same.</div>';
				if(!supress)showNotification('error',note,4000);
			}
			break;
		case "none":
			result = true;
			if(isEmpty(field) && checkEmpty) result = false;
			break;
	}
	return result;
}

function form2Array(form)
{
	var formData = new Array();
	for(i=0;i<form.elements.length;i++){
		var element = form.elements[i];
		if(element.value=='') element.value = null;
		if(element.name && element.name!='next') {
			var fieldData = new Array(element.name,element.value);
			formData.push(fieldData);
		}	
	}
	return formData;
}


/******* Validation *******/
function checkPasswordReg(field,suppress)
{
	var s=field.value;
	var password = 'document.'+field.form.name+'.password';
	var passwordField = eval(password);
	if(s==passwordField.value && !passwordField.value==''){
		passwordField.style.border = '';
		field.style.border = '';
		return true;
	}
	passwordField.style.border = '1px solid #FF0000';
	passwordField.value='';
	passwordField.focus();
	field.style.border = '1px solid #FF0000';
	field.value='';
	return false;
}

function isEmpty(s)
{
	if(s == null || s.length == 0) return true;
	return !/\S/.test(s);
}

function isEmail(field,checkEmpty)
{
	var s = field.value;
	// Check empty
	if(checkEmpty && isEmpty(s)){
		field.style.border = '1px solid #FF0000';
		return false;
	} else if(!checkEmpty && isEmpty(s)){
		field.style.border = '';
		return true;
	}
	// Check form
	if(!(/[^@]+@\w+/.test(s))) {
		field.style.border = '1px solid #FF0000';
		return false;		
	}
	field.style.border = '';	
	return true;
}

function isInteger(field,checkEmpty)
{
	var s = field.value;
	if(checkEmpty && isEmpty(s)){
		field.style.border = '1px solid #FF0000';
		return false;
	}
	if(!(/^-?\d+$/.test(s))){
		field.style.border = '1px solid #FF0000';
		return false;
	}
	field.style.border = '';
	return true;
}

function isAlphaStr(field,checkEmpty)
{
	var s = field.value;
	if(checkEmpty && isEmpty(s)){
		field.style.border = '1px solid #FF0000';
		return false;
	} else if(!checkEmpty && isEmpty(s)){
		field.style.border = '';
		return true;	
	}
	if(!(/^[a-zA-Z\s-]+$/.test(s))){
		field.style.border = '1px solid #FF0000';
		return false;
	} 
	field.style.border = '';
	return true;
}

function isAlphaNumStr(field,checkEmpty)
{
	var s = field.value;
	if(checkEmpty && isEmpty(s)){
		field.style.border = '1px solid #FF0000';
		return false;
	} else if(!checkEmpty && isEmpty(s)){
		field.style.border = '';
		return true;	
	}
	if(!(/^[a-zA-Z0-9\s-]+$/.test(s))){
		field.style.border = '1px solid #FF0000';
		return false;
	} 
	field.style.border = '';
	return true;
}