ValidationA = 
{
	Start: function()
	{
		var elements = new Array("emailAddress", "firstName", "lastName", "homeZip", "homePhone01", "homePhone02", "homePhone03")
		
		for (var element = 0; element < elements.length; ++element)
		{
			$X(''+ elements[element] +'').onblur = function () { ValidationA.Definitions(this, "true"); };
		}
		
		var elements = new Array("amountRequested", "bestCallTime")
		
		for (var element = 0; element < elements.length; ++element)
		{
			$X(''+ elements[element] +'').onchange = function () { ValidationA.Definitions(this, "true"); };
		}
		
		autoTab('homePhone01', 'homePhone02', 3);
		autoTab('homePhone02', 'homePhone03', 3);
		autoTab('cellPhone01', 'cellPhone02', 3);
		autoTab('cellPhone02', 'cellPhone03', 3);
	},
	
	Define: function()
	{
		var possArr = new Array();
		possArr['amountRequested'] = new Array("isEmpty();isNumber();");
		possArr['emailAddress'] = new Array("isEmpty();isEmail();");
		possArr['firstName'] = new Array("isEmpty();isMin(2);");
		possArr['lastName'] = new Array("isEmpty();isMin(2);");
		possArr['homeZip'] = new Array("isEmpty();isNumber();isMin(5);isMax(5);");
		possArr['homePhone01'] = new Array("isEmpty();isNumber();isMin(3);isMax(3);");
		possArr['homePhone02'] = new Array("isEmpty();isNumber();isMin(3);isMax(3);");
		possArr['homePhone03'] = new Array("isEmpty();isNumber();isMin(4);isMax(4);");
		possArr['bestCallTime'] = new Array("isEmpty();");
		
		return possArr;
	},
	
	Definitions: function(pTarget, sqlStatus)
	{
		var possArr = ValidationA.Define();
		
		if (sqlStatus == "true")
		{
			GlobalVal.Validate(pTarget.name, pTarget.value, possArr[pTarget.name][0], true);
		}
		else
		{
			GlobalVal.Validate(pTarget.name, pTarget.value, possArr[pTarget.name][0], false);
		}
	},
	
	CallBack: function()
	{
		var possArr = ValidationA.Define();
		var elements = new Array("amountRequested", "emailAddress", "firstName", "lastName", "homeZip", "homePhone01", "homePhone02", "homePhone03", "bestCallTime")
		var stop = '';
		
		for (var element = 0; element < elements.length; ++element)
		{
			if (GlobalVal.Validate(''+ elements[element] +'', $X(''+ elements[element] +'').value, possArr[''+ elements[element] +''][0], false) == "true")
			{
				//OK == Validation Passed
			}
			else
			{
				stop = true;
			}
		}
		
		if (stop == true)
		{
			alert('Please complete fields highlighted in RED');
			return false;
		}
		else
		{
			$X('getcash').disabled = true;
			return true;
		}
	}
}

GlobalVal =
{
	Validate: function(id, value, validations, mysql)
	{
		var valArr = validations.split(";");
		var newID = (strstr(id, 'ref')) ? (strstr(id, 'Phone')) ? id.replace(/[0-9]+/, '') : id : id.replace(/[0-9]+/, '');
		var stop = '';
		
		for (var element = 0; element < valArr.length; ++element)
		{
			if (valArr[element] != '')
			{
				if (GlobalVal.Process(id, value, valArr[element]) == true)
				{
					//Update Passed
					if (element == (valArr.length - 2))
					{
						if (mysql == true)
						{
							//GlobalVal.Mysql(id, value);
						}
					}
				}
				else
				{
					
					$X("V"+newID).src = 'images/cross2.png';
					$X(id).style.backgroundColor = '#DF8685';
					
					stop = 1;
					break;
				}
			}
		}
		
		if (stop != 1)
		{
			$X("V"+newID).src = 'images/tick2.png';
			$X(id).style.backgroundColor = '';
			return "true";
		}
	},
	
	Process: function(id, value, validation)
	{	
		switch (validation)
		{
			case strstr(validation, 'isEmpty'):
				if (value == '')
				{
					return false;
				}
				else
				{
					return true;
				}
			break;
			
			case strstr(validation, 'isNumber'):
				if (!IsNumeric(value) * 1)
				{
					return false;
				}
				else
				{
					return true;
				}
			break;
			
			case strstr(validation, 'isMin'):
				var newNum = validation.match(/isMin\((.*)\)/);
				
				if (value.length < newNum[1])
				{
					return false;
				}
				else
				{
					return true;
				}
			break;
			
			case strstr(validation, 'isMax'):
				var newNum = validation.match(/isMax\((.*)\)/);
				
				if (value.length > newNum[1])
				{
					return false;
				}
				else
				{
					return true;
				}
			break;
			
			case strstr(validation, 'isEmail'):
				var emailRegex = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
				
				if (emailRegex.test(value) == false)
				{
					return false;
				}
				else
				{
					return true;
				}
			break;
			
			case strstr(validation, 'isDate'):
				var dateRegex = /^([0-9]{2})+\/([0-9]{2})+\/([0-9]{4})$/;
				
				if (dateRegex.test(value) == false)
				{
					return false;
				}
				else
				{
					return true;
				}
			break;
		}
	},
	
	Mysql: function(name, value)
	{
		var xmlHttp;
		var id = $X('uid').value;
		
		if (this.id != '')
		{
			try
			{
				xmlHttp=new XMLHttpRequest();
			}
			catch (e)
			{
				try
				{
					xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch (e)
				{
					try
					{
						xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
					}
					catch (e)
					{
						//Ajax is not supported
						return false;
					}
				}
			}
			
			xmlHttp.onreadystatechange = function()
			{
				if (xmlHttp.readyState == 4)
				{
					if (xmlHttp.status == 200)
					{
						var response = xmlHttp.responseText.split('|');
						if (response[0] == "OK")
						{
							//Pass
						}
						else
						{
							//Fail
						}
					}
				}
			}
			
			xmlHttp.open("GET", 'update?uid='+ id +'&rowKey='+ name +'&rowValue=' + value +'', true);
			xmlHttp.send(null);
		}
		else
		{
			return false;
		}
	}
}

function strstr( haystack, needle, bool )
{
    var pos = 0;
	
    haystack += '';
    pos = haystack.indexOf( needle );
    if( pos == -1 ){
        return false;
    } else{
        if( bool ){
            return haystack.substr( 0, pos );
        } else{
            return haystack.slice( pos );
        }
    }
}

function $X(element)
{
	element = document.getElementById(element);
	return element;
}

function autoTab(CurrentElementID, NextElementID, FieldLength) {
    var CurrentElement = $('#' + CurrentElementID);
    var NextElement = $('#' + NextElementID);
 
    CurrentElement.keyup(function(e) {
        var KeyID = (window.event) ? event.keyCode : e.keyCode;
		
        if (CurrentElement.val().length >= FieldLength
            && ((KeyID >= 48 && KeyID <= 90) ||
            (KeyID >= 96 && KeyID <= 105)))
            NextElement.focus();
    });
}

function IsNumeric(strString)
{
	var strValidChars = "0123456789.-";
	var strChar;
	var blnResult = true;

	if (strString.length == 0) return false;

	for (i = 0; i < strString.length && blnResult == true; i++)
	{
		strChar = strString.charAt(i);
		if (strValidChars.indexOf(strChar) == -1)
		{
			blnResult = false;
		}
	}
	return blnResult;
}
