﻿// JScript File

/* check expressio type */
function checkExpressionType(expression)
{
	var alpha = 0;
	var num = 0;
	
	for(i = 0; i < expression.length; i++)
	{
		var character = expression[i].toString();
		if(character != ' ')
		{
			if(isNaN(character))
			{
				alpha++;
			}
			else
			{
				num++;	
			}	
		}	
	}
	
	if(alpha > 0 && num > 0)
	{
		return 'alpha-num';
	}
	else
	{
		if(alpha > 0 && num == 0)
		{
			return 'alpha';
		}
		
		if(alpha == 0 && num > 0)
		{
			return 'num';
		}
	}
}

/* validate state */
function isValidState(state)
{
//52 states
	var arr = new Array(52);
	arr[0] = 'AL';
	arr[1] = 'AK';
	arr[2] = 'AS';
	arr[3] = 'AZ';
	arr[4] = 'AR';
	arr[5] = 'CA';
	arr[6] = 'CO';
	arr[7] = 'CT';
	arr[8] = 'DE';
	arr[9] = 'DC';
	arr[10] = 'FL';
	arr[11] = 'GA';
	arr[12] = 'HI';
	arr[13] = 'ID';
	arr[14] = 'IL';
	arr[15] = 'IN';
	arr[16] = 'IA';
	arr[17] = 'KS';
	arr[18] = 'KY';
	arr[19] = 'LA';
	arr[20] = 'ME';
	arr[21] = 'MD';
	arr[22] = 'MA';
	arr[23] = 'MI';
	arr[24] = 'MN';
	arr[25] = 'MS';
	arr[26] = 'MO';
	arr[27] = 'MT';
	arr[28] = 'NE';
	arr[29] = 'NV';
	arr[30] = 'NH';
	arr[31] = 'NJ';
	arr[32] = 'NM';
	arr[33] = 'NY';
	arr[34] = 'NC';
	arr[35] = 'ND';
	arr[36] = 'OH';
	arr[37] = 'OK';
	arr[38] = 'OR';
	arr[39] = 'PA';
	arr[40] = 'RI';
	arr[41] = 'SC';
	arr[42] = 'SD';
	arr[43] = 'TN';
	arr[44] = 'TX';
	arr[45] = 'UT';
	arr[46] = 'VT';
	arr[47] = 'VA';
	arr[48] = 'WA';
	arr[49] = 'WV';
	arr[50] = 'WI';
	arr[51] = 'WY';
	
	var valid = false;
	for(i = 0; i < arr.length; i++)
	{
		if(arr[i].toString() == state.toUpperCase())
		{			
			valid = true;
			break;
		}
	}
	
	return valid;
}


/* validate zip */
function isValidZip(zip)
{
	
	if(zip.length == 5)
	{
		if(checkExpressionType(zip) == 'num')
		{
			return 'valid';
		}
		else
		{
			return 'Zip code must be numeric.';
		}
	}
	else
	{
		if(zip.replace('-', '').length == 9)
		{
			if(checkExpressionType(zip.replace('-','')) == 'num')
			{
				return 'valid';
			}
			else
			{
				return 'Zip Code must be numeric.';
			}
		}
		else
		{
			return 'Zip Code format is not valid.';
		}
	}
}

/* validate phone */
function isValidPhone(phone)
{
	var x = '';
	var p = phone.replace('-','').replace('-','');
	
	if(p.length > 10)
	{
		//ext
		p = p.replace(' ','').replace(' ','');
		x = p.substr(11);
		p = p.substr(0,10);
	}
	
	if(phone.length >= 12)
	{
		if(checkExpressionType(p) == 'num')
		{
			if(x.length > 0)
			{
				if(checkExpressionType(x) == 'num')
				{
					return 'valid';
				}
				else
				{
					return 'Phone extension is not valid. (check format)';
				}
			}
			else
			{
				return 'valid';
			}
		}
		else
		{
			return 'Phone number is not valid. (check format)';
		}
	}
	else
	{
		return 'Please check required format for the phone number.';
	}
}

/* validate email */
function isValidEmail(email)
{
	//0
	var empty_spaces = 0;
	//1
	var ats = 0;
	//>=1
	var dots = 0;
	//at_index < last_dot_index
	var at_index = 0;
	var last_dot_index = 0;
	//>=2 | alpha
	var ext = '';
	var alpha_ext = false;
	var ext_length = 0;
	//at least 2
	var domain_length = 0;
	
	for(i = 0; i < email.length; i++)
	{
		if(email[i].toString() == ' ')
		{
			empty_spaces++;
		}
		if(email[i].toString() == '@')
		{
			ats++;
			at_index = i;
		}
		if(email[i].toString() == '.')
		{
			dots++;
			last_dot_index = i;
		}
	}
	
	//ext
	ext = email.substr(last_dot_index + 1);
	if(checkExpressionType(ext) == 'alpha')
	{
		ext_alpha = true;
	}
	ext_length = ext.length;
	
	//domain
	domain_length = last_dot_index - at_index - 1;
	
	//no empty spaces
	if(empty_spaces == 0)
	{
		//1 @ symbol
		if(ats == 1)
		{
			//>= 1 dot symbol
			if(dots >= 1)
			{
				//at_index < last_dot_index
				if(at_index < last_dot_index)
				{
					//ext_length >= 2 && ext_alpha
					if(ext_length >= 2 && ext_alpha)
					{
						//domain_length >= 2
						if(domain_length>= 2)
						{
							return 'valid';
						}
						else
						{
							return 'Email format is not valid (domain must be at least 2 chararcters long)';
						}
					}
					else
					{
						return 'Email format is not valid (extension must be alphabetic and at least 2 characters)';
					}
				}
				else
				{
					return 'Email format is not valid (last . symbol must be after @ symbol)';
				}
			}
			else
			{
				return 'Email format is not valid (you must have at least one . symbol)';
			}
		}
		else
		{
			return 'Email format is not valid (you must have only one @ symbol)';
		}
	}
	else
	{
		return 'Email format is not valid (no empty spaces).';
	}	
}


function isValidURL(url)
{
	var arr = new Array(5);
	arr[0] = 'https://www.';//12
	arr[1] = 'http://www.';//11
	arr[2] = 'https://';//8
	arr[3] = 'http://';//7
	arr[4] = 'www.';//4	
	
	var prefix_valid = false;
	var prefix = '';
	
	var start_index = 0;
	var dot_index = 0;
	var dot_ctr = 0;
	var domain_length = 0;
	var domain = '';	
	
	var ext = '';
	var ext_length = 0;
	var ext_alpha = false;
		
	url = url.toLowerCase();
	
	prefix = url.substr(0,12).toString();
	if(prefix == arr[0].toString())
	{
		prefix_valid = true;
		start_index = 12;
	}
	else
	{
		prefix = url.substr(0,11).toString();
		if(prefix == arr[1].toString())
		{
			prefix_valid = true;
			start_index = 11;
		}
		else
		{
			prefix = url.substr(0,8).toString();
			if(prefix == arr[2].toString())
			{
				prefix_valid = true;
				start_index = 8;
			}
			else
			{
				prefix = url.substr(0,7).toString();
				if(prefix == arr[3].toString())
				{
					prefix_valid = true;
					start_index = 7;
				}
				else
				{
					prefix = url.substr(0,4).toString();
					if(prefix = arr[4].toString())
					{
						prefix_valid = true;
						start_index = 4;
					}
				}
			}
		}
	}
	
	domain = url.substr(start_index);	
	
	for(i = 0; i < domain.length; i++)
	{
		if(domain[i].toString() == '.')
		{
			dot_index = i;
			dot_ctr++;
		}
	}
	
	ext = domain.substr(dot_index + 1);
	ext_length = ext.length;
	if(checkExpressionType(ext) == 'alpha')
	{
		ext_alpha = true;
	}
	
	
	domain_length = domain.substr(0, dot_index).length; 
	
	//prefix
	if(prefix_valid)
	{
		//domain length
		if(domain_length >= 2)
		{
			if(ext_length >= 2 && ext_alpha)
			{
				if(dot_ctr >= 1)
				{
					return 'valid';
				}
				else
				{
					return 'Extension must have dot [.] symbol (ex. http://msn.com --> .com)';
				}
			}
			else
			{
				return 'Extension must be at least 2 alpha characters (ex. http://msn.com --> extension (com))';
			}
		}
		else
		{
			return 'Domain length must be at least 2 characters. (ex. http://msn.com --> domain (msn))';
		}
	}
	else
	{
		return 'Prefix is not valid. (ex. https://www. | http://www. | https:// | http:// | www.)';	
	}
}