﻿
/*
 *
 *	Functions used for form validation
 *	--------------------------------------------------------------------------------
 *
*/

/*
	Form validation example :
	
		validationTitle =		"Some errror title";
		validationTypeFields =	
								[
									["validationType{data|length}","required{true|false}","dataType{string|number|email|phone|date|url|option|compare}","max length if validationType{int length}","field Name", "Validation title","errorClass"]
								];

*/

// Checks if form field exists
function isFormFieldExists(formFieldId) 
{
	return (document.getElementById(formFieldId) != undefined);
}

function IsValidEmail(str) 
{
		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)

		if (str.indexOf(at)==-1)
		{
		   return false;
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr)
		{
		   return false;
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr)
		{
			return false;
		}

		 if (str.indexOf(at,(lat+1))!=-1)
		 {
			return false;
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot)
		 {
			return false;
		 }

		 if (str.indexOf(dot,(lat+2))==-1)
		 {
			return false;
		 }
		
		 if (str.indexOf(" ")!=-1)
		 {
			return false;
		 }

 		 return true;
}

// Checks if form field is filled
function isFormFieldFilled(formFieldId,validationType,required,dataType,maxLength)
{
//	if(document.getElementById(formFieldId) == undefined)
//	{
//	    alert('Form field "' + formFieldId + '" doesn`t exist!');
//	}
	
	if(validationType == "data")
	{
		//string|number|email|phone|date|url|option|compare
		switch(dataType)
		{
			case "string":
				if(!document.getElementById(formFieldId).disabled)
				{
					return (isFormFieldExists(formFieldId) && Trim(document.getElementById(formFieldId).value) != '');
				}
				return true;
			break;
			case "number":
				if(!document.getElementById(formFieldId).disabled)
				{
					if(required)
					{
						return (isFormFieldExists(formFieldId) && Trim(document.getElementById(formFieldId).value) != '' && !isNaN(Trim(document.getElementById(formFieldId).value)));
					}
					else
					{
						if(Trim(document.getElementById(formFieldId).value) != '')
						{
							return (isFormFieldExists(formFieldId) && !isNaN(Trim(document.getElementById(formFieldId).value)));
						}
					}
				}
				return true;
			break;
			case "email":
				if(!document.getElementById(formFieldId).disabled)
				{
    				//var emailRegxp = /^([\w]+)(.[\w]+)*@([\w-_]+)(.[\w]{2,3}){1,2}$/;
					//var emailRegxp = /^[\\w-_--\.]*[\\w-_--\.]\@[\\w]\.+[\\w]+[\\w]$/;
					//"^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
					//var emailReg = "^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$";
				    //var regex = new RegExp(emailReg);
					if(required)
					{
						return (isFormFieldExists(formFieldId) && Trim(document.getElementById(formFieldId).value) != '' && IsValidEmail(Trim(document.getElementById(formFieldId).value)));
					}
					else
					{
						if(Trim(document.getElementById(formFieldId).value) != '')
						{
							return (isFormFieldExists(formFieldId) && IsValidEmail(Trim(document.getElementById(formFieldId).value)));
						}
					}
				}
				return true;
			break;
			case "phone":
				if(!document.getElementById(formFieldId).disabled)
				{
    				var phoneRegxp = /^[01]?\s*[\(\.-]?(\d{3})[\)\.-]?\s*(\d{3})[\.-](\d{4})$/;
					if(required)
					{
						return (isFormFieldExists(formFieldId) && Trim(document.getElementById(formFieldId).value) != '' && phoneRegxp.test(Trim(document.getElementById(formFieldId).value)));
					}
					else
					{
						if(Trim(document.getElementById(formFieldId).value) != '')
						{
							return (isFormFieldExists(formFieldId) && phoneRegxp.test(Trim(document.getElementById(formFieldId).value)));
						}
					}
				}
				return true;
			break;
			case "date":
				if(!document.getElementById(formFieldId).disabled)
				{
					var dateRegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
					objDateField = Trim(document.getElementById(formFieldId).value);
					if(required)
					{
						return (isFormFieldExists(formFieldId) && Trim(document.getElementById(formFieldId).value) != '' && objDateField.match(dateRegExPattern));
					}
					else
					{
						if(Trim(document.getElementById(formFieldId).value) != '')
						{
							return (isFormFieldExists(formFieldId) && objDateField.match(dateRegExPattern));
						}
					}
				}
				return true;
			break;
			case "url":
				if(!document.getElementById(formFieldId).disabled)
				{
					var urlRegxp = "^http://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$";
					matchURL = document.getElementById(formFieldId).value.match(urlRegxp);
					if(required)
					{
 						return (isFormFieldExists(formFieldId) && Trim(document.getElementById(formFieldId).value) != '' && matchURL != null);
					}
					else
					{
 						if(Trim(document.getElementById(formFieldId).value) != '')
 						{
 							return (isFormFieldExists(formFieldId) && matchURL != null);
 						}
					}
				}
				return true;
			break;
			case "option":
				var fieldItems  = formFieldId.split('#');
				for(i = 0; i < fieldItems[1]; i++)
				{
					fieldName = fieldItems[0] + "_" + i;
					if(!document.getElementById(fieldName).disabled)
					{
						if(document.getElementById(fieldName).checked && isFormFieldExists(fieldName))
						{
							return true;
						}
					}
					else
					{
						return true;
					}
				}
				return false;
			break;
			case "compare":
				fieldItems = formFieldId.split("#");
				if(!document.getElementById(fieldItems[0]).disabled && !document.getElementById(fieldItems[1]).disabled && (document.getElementById(fieldItems[0]).value != '' || document.getElementById(fieldItems[1]).value != ''))
				{
					return (isFormFieldExists(fieldItems[0]) && isFormFieldExists(fieldItems[1]) && (Trim(document.getElementById(fieldItems[0]).value) == Trim(document.getElementById(fieldItems[1]).value)));
				}
				else
				{
					return true;
				}
			break;
		}		
	}
	
	if(validationType == "length")
	{
		if(document.getElementById(formFieldId).value.indexOf('#') == -1)
		{
			return (isFormFieldExists(formFieldId) && document.getElementById(formFieldId).value.length <= maxLength);
		}
		else
		{
			return true;
		}
	}
}

// Validate form fields
function validateFormFields(warningTitle, fieldsArray) 
{
	var warningMessage = '';
	for (j=0; j < fieldsArray.length; j++) 
	{
		if (!isFormFieldFilled(fieldsArray[j][4],fieldsArray[j][0],fieldsArray[j][1],fieldsArray[j][2],fieldsArray[j][3]))
		{
			//if(fieldsArray[j][2] != "option" && fieldsArray[j][2] != "compare")
			//{
			//	document.getElementById(fieldsArray[j][4]).className = fieldsArray[j][6];
            //}
            
            
            //if(fieldsArray[j][2] == "compare")
            //{
			//	var fieldItemArray = fieldsArray[j][4].split("#");
			//	document.getElementById(fieldItemArray[0]).className = fieldsArray[j][6];
			//	document.getElementById(fieldItemArray[1]).className = fieldsArray[j][6];
            //}
            
            warningMessage += ' - ' + fieldsArray[j][5] + '\n';
		}
	}
	
	if (warningMessage != '') 
	{
		alert(warningTitle + '\n\n' + warningMessage);
		return false;
	}
	return true;
}

// Checks field minimal length
function GetFieldLength(minimalLength,field,alertMessage)
{
	if(Trim(document.getElementById(field).value).length < minimalLength)
	{
		alert(alertMessage);
		return false;
	}
	return true;
}

function Trim(inputString) 
{
	while (inputString.substring(0,1) == ' ')
	{
		inputString = inputString.substring(1, inputString.length);
	}
	while (inputString.substring(inputString.length-1, inputString.length) == ' ')
	{
		inputString = inputString.substring(0,inputString.length-1);
	}
	return inputString;
}
