// JavaScript Document

window.onload = initiateForm;
	

/****************
################# object to store different error messages ################# 
****************/
var formSubmitted = false;
var objectErrors = {
	reqField : "Required field missing",
	wrongEmailConf: "Please confirm your email",
	email : "Invalid email",
	}
	
var containErrors = [];
var timesInserted; 

var legalChars1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var legalChars2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var legalChars3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-";
var legalChars4 = "0123456789";

/****************
################# initiate form submit ################# 
****************/

function initiateForm() {
	//gets form from form objects
	for (var i = 0; i < document.forms.length; i++) {
		document.forms[i].onsubmit = function() {return validateForm(this);}
	}
	if(formSubmitted == true){
		alert('sub');	
	}
}

function getSelectIndex(param){
	return document.getElementById(param).selectedIndex;
}



/****************
################# initiate form validation ################# 
****************/

function validateForm(form) {
	containErrors = [];
	
	if(isTextEmpty(form.frstName)){
		containErrors.push(objectErrors.reqField);
	}else{
		if(validateString(form.frstName,legalChars1,true)){
			containErrors.push(objectErrors.reqField);
			changeLabelColor(form.frstName,true);
		}else{
			changeLabelColor(form.frstName,false);
		}
	}
	
	if(isTextEmpty(form.surmane)){
		containErrors.push(objectErrors.reqField);	
	}else{
		if(validateString(form.surmane,legalChars1,true)){
			containErrors.push(objectErrors.reqField);
			changeLabelColor(form.surmane,true);
		}else{
			changeLabelColor(form.surmane,false);
		}
	}
	
	if(isTextEmpty(form.address1)){
		containErrors.push(objectErrors.reqField);	
	}else{
		if(validateString(form.address1,legalChars2,true)){
			containErrors.push(objectErrors.reqField);
			changeLabelColor(form.address1,true);
			changeFieldColor(form.address1,true);
		}else{
			changeLabelColor(form.address1,false);
			changeFieldColor(form.address1,false);
		}
	}
	
	if(isTextEmpty(form.address2)){
		containErrors.push(objectErrors.reqField);	
	}else{
		if(validateString(form.address2,legalChars2,true)){
			containErrors.push(objectErrors.reqField);
			changeLabelColor(form.address2,true);
			changeFieldColor(form.address2,true);
		}else{
			changeLabelColor(form.address2,false);
			changeFieldColor(form.address2,false);
		}
	}
	
	if(isTextEmpty(form.email)){
		containErrors.push(objectErrors.reqField);	
	}else if(isInvalidEmail(form.email)){
		containErrors.push(objectErrors.email);
	}
	
	if(isTextEmpty(form.confEmail)){
		containErrors.push(objectErrors.reqField);
	}else if(isInvalidEmail(form.confEmail)){
		containErrors.push(objectErrors.reqField);
	}
	
	if(getSelectIndex('country') == 1){
		if(isTextEmpty(form.postcode)){
			containErrors.push(objectErrors.reqField);	
		}
	}else{
		changeFieldColor(form.postcode,false);
	}
	
	if(isSelectEmpty(form.country)){
		changeLabelColor(form.country,true);
		containErrors.push(objectErrors.reqField);	
	}else{
		changeLabelColor(form.country,false);
	}
	

	if(isSelectEmpty(form.title)){
		containErrors.push(objectErrors.reqField);	
	}
	
	if(isTextEmpty(form.town)){
		containErrors.push(objectErrors.reqField);
		changeLabelColor(form.town,true);
	}else{
		changeLabelColor(form.town,false);
	}

	
	if(!isTextEmpty(form.email) && !isTextEmpty(form.confEmail)){
		if(isEmailDifferent(form.email,form.confEmail)){
			containErrors.push(objectErrors.wrongEmailConf);
		}
	}
	//alert(calculateUserAge(form.cboDay,form.cboMonth,form.cboYear,"years"));
	
	

	// if there are errors show it 
	if(containErrors.length > 0){
		writeErrors();
		//alert(invalid);
		return false;
	}else{
		formSubmitted = true;
		return true;
	}
	// no errors then submit
	
	/*document.forms[0].submit();
	alert("here");*/
}

/****************
################# function to validate empty field ################# 
****************/

function isTextEmpty(field) {
	if(field.value.length == 0) {
		changeFieldColor(field,true);
		return true;
    }else{
		changeFieldColor(field,false);
	}
	return false;	
}

/****************
################# function to validate empty select ################# 
****************/

function isSelectEmpty(field){
	if(field.selectedIndex == 0){
		changeLabelColor(field,true);
		changeFieldColor(field,true);
		return true;
	}else{
		changeLabelColor(field,false);
		changeFieldColor(field,false);
	}
	return false;
}

/****************
################# function to validate valid string receiving a variable of strings ##################
****************/

function validateString(field,extraChars,removeWhiteSpaces){
	var newValue;
	if (typeof removeWhiteSpaces == "undefined"){
		newValue = field.value;
	}else{
		newValue = removeFieldSpaces(field.value);
	}
	var newLength = newValue.length;
	var searchString;
	
	for(var i = 0; i < newLength; i++) {
		aChar = newValue.substring(i,i+1);
		aChar = aChar.toUpperCase();
		searchString = extraChars.indexOf(aChar);
		if(searchString == -1) {return true;}
	}
	return false;
}


/****************
################# function to validate email ################# 
****************/

function isInvalidEmail(field) {
    var error ="";
    var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ; 	//regular expression
	var carIlegais= /[\(\)\<\>\,\;\:\ç\ã\â\\\"\[\]]/ ; 		//illegar chars
	var email = removeFieldSpaces(field.value);
   
    if(field.value.length == 0) {
		changeLabelColor(field,true);
		return true;
	}else if(!emailFilter.test(email)){
		changeLabelColor(field,true);
		return true;
	}else{
		changeLabelColor(field,false);
		return false
	}
}

/****************
################# function to check if password equal to confirm password ################# 
****************/

function isEmailDifferent(field1,field2){
	var pass1 = field1.value;
	var pass2 = field2.value;
	
	if(pass1 != pass2){
		changeLabelColor(field1,true);
		changeFieldColor(field1,true);
		changeLabelColor(field2,true);
		changeFieldColor(field2,true);
		return true;
	}else{
		changeLabelColor(field1,false);
		changeFieldColor(field1,false);
		changeLabelColor(field2,false);
		changeFieldColor(field2,false);
		return false;
	}
}
/****************
################# function to change label color ################# 
****************/

function changeLabelColor(field,error){
	var newColor = "#FF0000";
	var defaultColor = "#FFFFFF";
	var labels=document.getElementsByTagName("label");
	for(var i=0; i <labels.length; i++ ){
		var labelText = labels[i].id.substr(3);
		if(labelText == field.id || labelText == field){
			if(error == true){
				labels[i].style.color= newColor;
				if(field.id == "chkTermsCondition"){
					//$('#lblchkTermsCondition a').css("color",newColor);	
				}
			}else if(error == false){
				labels[i].style.color= defaultColor;
				if(field.id == "chkTermsCondition"){
					//$('#lblchkTermsCondition a').css("color",defaultColor);
				}
			}
		}
	}
	

}

function changeFieldColor(field,error){
	var newColor = "#ff0000";
	var originalColor = "#c4c9d1";
	if(error == true){
		field.style.borderColor = newColor;
	}else if(error == false){
		field.style.borderColor = originalColor;
	}
}

/****************
################# function to write erros on error div ################# 
****************/

function writeErrors(){
	containErrors = containErrors.unique();
	var errorContainer = document.getElementById("error");
	errorContainer.innerHTML = "";
	var textError;
	if(document.createTextNode){
		for(var i = 0; i < containErrors.length; i++){
			textError = document.createTextNode(containErrors[i]);
			errorContainer.appendChild(textError);
			errorContainer.appendChild(document.createElement("br"));
		}	
	}
	containErrors = new Array();
}

/****************
################# function to remove white spaces from field ###############################################
****************/

function removeFieldSpaces(string) {
	return string.split(' ').join('');
}




