
//==========================================
//
//	Created by Aghasi Hakobyan 
//	aghasih@yahoo.com
//
//==========================================


function isValidDate(dateStr) //Checks if date is in MM/DD/YY, MM/DD/YYYY, MM-DD-YY, MM-DD-YYYY format.
{
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
	var matchArray = dateStr.match(datePat);
	if (matchArray == null) 
		return ("Date is not in a valid format.");
	month = matchArray[1];
	day = matchArray[3];
	year = matchArray[4];
	if (month < 1 || month > 12) 
		return("Month must be between 1 and 12.");
	if (day < 1 || day > 31) 
		return("Day must be between 1 and 31.");
	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
		return("Month "+month+" doesn't have 31 days!");
	if (month == 2) 
		{
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (day>29 || (day==29 && !isleap)) 
				return("February " + year + " doesn't have " + day + " days!");
		}
	return ("Yes");
}

function isValidTime(timeStr) // Checks if time is in HH:MM:SS AM/PM format.
{
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	var matchArray = timeStr.match(timePat);
	if (matchArray == null)
		return("Time is not in a valid format.");

	hour = matchArray[1];
	minute = matchArray[2];
	second = matchArray[4];
	ampm = matchArray[6];

	if (second=="")
		second = null;
	if (ampm=="")
		ampm = null;

	if (hour < 0  || hour > 23)
		return("Hour must be between 1 and 12. (or 0 and 23 for military time)");

	if (hour <= 12 && ampm == null)
		{
			if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time"))
				return("You must specify AM or PM.");
		}
	if (hour > 12 && ampm != null)
		return("You can't specify AM or PM for military time.");

	if (minute<0 || minute > 59)
		return ("Minute must be between 0 and 59.");

	if (second != null && (second < 0 || second > 59))
		return("Second must be between 0 and 59.");

	return "Yes";
}

function isValidEmail (emailStr) // Checks if email is in valid format.
{
	//var val = document.form1.emailfield.value
	var emailPat=/(.+)@(.+)$/;
	var specialChars="\\(\\)<>@,;:`?|{}'/+*=!#$%^&~\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var countryCodes = new Array ( "AF" , "AL" ,  "DZ" ,  "AS" ,  "AD" ,  "AO" ,  "AI" ,  "AQ" ,  "AG" ,  "AR" ,  "AM" ,  "AW" , 
 	 "AU" ,  "AT" ,  "AZ" ,  "BS" ,  "BH" ,  "BD" ,  "BB" ,  "BY" ,  "BE" ,  "BZ" ,  "BJ" ,  "BM" ,  "BT" ,  "BO" ,  "BA" ,  "BW" , 
	 "BV" ,  "BR" ,  "BN" ,  "BG" ,  "BF" ,  "BI" ,  "KH" ,  "CM" ,  "CA" ,  "CV" , 
	 "KY" ,  "CF" ,  "TD" ,  "CL" ,  "CN" ,  "HK" ,  "CX" ,  "CC" ,  "CO" ,  "KM" ,  "CG" ,  "CD" ,  "CK" ,  "CR" ,  "CI" ,  "HR" , 
	 "CU" ,  "CY" ,  "CZ" ,  "DK" ,  "DJ" ,  "DM" ,  "DO" ,  "TP" ,  "EC" ,  "EG" ,  "SV" ,  "GQ" ,  "ER" ,  "EE" ,  "ET" , 
	 "FK" ,  "FO" ,  "FJ" ,  "FI" ,  "FR" ,  "GF" ,  "PF" ,  "GA" ,  "GM" ,  "GE" ,  "DE" ,  "GH" ,  "GI" ,  "GR" ,  "GL" ,  "GD" , 
	 "GP" ,  "GU" ,  "GT" ,  "GN" ,  "GW" ,  "GY" ,  "HT" ,  "HN" ,  "HU" ,  "IS" ,  "IN" ,  "ID" ,  "IR" ,  "IQ" ,  "IE" ,  "IL" ,  "IT" , 
	 "JM" ,  "JP" ,  "JO" ,  "KZ" ,  "KE" ,  "KI" ,  "KR" ,  "KP" ,  "KW" ,  "KG" ,  "LA" ,  "LV" ,  "LB" ,  "LS" ,  "LR" ,  "LY" , 
	 "LI" ,  "LT" ,  "LU" ,  "MO" ,  "MK" ,  "MG" ,  "MW" ,  "MY" ,  "MV" ,  "ML" ,  "MT" ,  "MH" ,  "MQ" ,  "MR" ,  "MU" ,  "YT" ,  "MX" , 
	 "FM" ,  "MD" ,  "MC" ,  "MN" ,  "MS" ,  "MA" ,  "MZ" ,  "MM" ,  "NA" ,  "NR" ,  "NP" ,  "AN" ,  "NL" ,  "NC" ,  "NZ" ,  "NI" , 
	 "NE" ,  "NG" ,  "NU" ,  "NF" ,  "NO" ,  "OM" ,  "PK" ,  "PW" ,  "PA" ,  "PG" ,  "PY" ,  "PE" ,  "PH" ,  "PN" ,  "PL" , 
	 "PT" ,  "PR" ,  "QA" ,  "RE" ,  "RO" ,  "RU" ,  "RW" ,  "SH" ,  "LC" ,  "WS" ,  "SM" ,  "SA" ,  "SN" ,  "SC" ,  "SL" , 
	 "SG" ,  "SK" ,  "SI" ,  "SB" ,  "SO" ,  "ZA" ,  "ES" ,  "LK" ,  "SD" ,  "SR" ,  "SZ" ,  "SE" ,  "CH" ,  "SY" ,  "TW" ,  "TJ" ,  "TZ" , 
	 "TH" ,  "TG" ,  "TK" ,  "TO" ,  "TT" ,  "TN" ,  "TR" ,  "TM" ,  "TV" ,  "UG" ,  "UA" ,  "AE" ,  "UK" ,  "US" ,  "UY" ,  "UZ" ,  "VU" , 
	 "VA" ,  "VE" ,  "VN" ,  "VG" ,  "VI" ,  "EH" ,  "YE" ,  "YU" ,  "ZM" ,  "ZW" )
	var nMail;
	for (p = 0 ; p<emailStr.length; p++)
	{
		if (emailStr.charAt(p)!=" ")
			nMail = nMail + emailStr.charAt(p);
	}
	emailStr = nMail;
	if (emailStr=="")
	{
		return "File not found";
	}
	
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) 
		return("Email address seems incorrect (check @ and .'s)");
	var user=matchArray[1];
	var domain=matchArray[2];
	if ((user.match(userPat)==null) || (user.charAt(0)=="-") || (user.charAt(user.length-1)=="-") )
	    return("The username in email address doesn't seem to be valid.");
	for(var i=0; i<user.length-1; i++)
		{	var ch= user.substring(i, i + 2);
		 	if((ch=="--") || (ch=="-.") || (ch==".-") || (ch=="__") || (ch=="_.") || (ch=="._") || (ch=="_-") || (ch=="-_"))
				return("The username in email address doesn't seem to be valid.");	
		}
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) 
		{	for (var i=1;i>=4;i++) 
				{  if (IPArray[i]>255)
				     return("Destination IP address is invalid!");
				}
		 	return true;
		}
	if ((domain.match(domainPat)==null) || (domain.charAt(0)=="-") || (domain.charAt(domain.length-1)=="-") || (domain.indexOf("_") != -1 ))
		return("The domain name doesn't seem to be valid.");
	for(var i=0; i<domain.length-1; i++)
		{	
			var ch= domain.substring(i, i + 2);
		 	if(ch=="--" || ch=="-." || ch==".-")
				return("The domain name doesn't seem to be valid.");	
		}
	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if (len < 2)
		return("This email address is missing a hostname!");
	var domainExt = domArr[domArr.length-1]
	if (domainExt.length<2 || domainExt.length >3 )
	   if(domainExt.toUpperCase()!="INFO")	
	   return("The address must end in a three-letter domain, or two letter country.");
	   
	if (domainExt.length==2)
		{	var validCountryCode = false;
			for (var i=0; i<countryCodes.length-1; i++)
				{	if (domainExt.toUpperCase()== countryCodes[i])
						{	validCountryCode = true;
							break;	
						}
				}
			if (!validCountryCode)
				return ("This email address is missing a country code!");
		}
	else
		{	for(var i=0; i>3; i++)
				{	if((domainExt.charAt(i) < "a" || "z" < domainExt.charAt(i)) && (domainExt.charAt(i) < "A" || "Z" < domainExt.charAt(i)) && (domainExt.charAt(i)!= ' '))
			   			return("Only letters are accepted in domain extension!");
				}
		}
	return ("Yes");
}

function isValidZIP(zipStr) //Checks if email is in '12345-6789' format.
{
	var validChars = "0123456789-";
	var hyphencount = 0;
	
	if (zipStr.length!=5 && zipStr.length!=10)
		return("Please enter your 5 digit or 5 digit+4 zip code.");

	for (var i=0; i < zipStr.length; i++)
		{
			var temp = "" + zipStr.substring(i, i+1);
			if (temp == "-")
				hyphencount++;
			if (validChars.indexOf(temp) == "-1")
				return("Invalid characters in your zip code.  Please try again.");
			if ((hyphencount > 1) || ((zipStr.length==10) && ""+zipStr.charAt(5)!="-"))
				return("The hyphen character should be used with a properly formatted 5 digit+four zip code, like '12345-6789'.   Please try again.");
		}
	return ("Yes");
}

function isValidNumber(numberStr)//Checks if value is valid number.
{
	var validChars = "0123456789";
	var isNumber = true;
	var currentChar;
	for (var i=0; i<numberStr.length; i++) 
		{
			currentChar = "" + numberStr.substring(i, i+1);
			if (validChars.indexOf(currentChar) == "-1") 
				isNumber = false;
		}
	if (! isNumber)
		return("Invalid entry!  Only numbers are accepted!");
	return ("Yes");
}

function isValidNumber2(numberStr)//Checks if value is valid number.
{
	var validChars = "0123456789.";
	var isNumber = true;
	var currentChar;
	var dec = false;
	for (var i=0; i<numberStr.length; i++) 
		{
			currentChar = "" + numberStr.substring(i, i+1);
			if (validChars.indexOf(currentChar) == "-1") 
				isNumber = false;
			if (currentChar == ".") {
				if (dec){
					isNumber = false;	
				}
				if ((numberStr.length -i) > 3 ){
					isNumber = false;	
				} 
				dec = true;
			}
		}
	if (numberStr.length == 0 ){
		return("")
	}
	if (! isNumber)
		return("Only currency format are accepted!  \nFormat is 'xxx.xx' ");
	return ("Yes");
}

function isValidName(nameStr) 
{
	for (var i = 0; i < nameStr.length; i++) 
		{
			var ch = nameStr.substring(i, i + 1);
			if (((ch < "a" || "z" < ch) && (ch < "A" || "Z" < ch)) && ch != ' ') 
				return("Only letters & spaces are accepted. Please re-enter your name.");
		}
	return ("Yes");
}

function isValidName2(nameStr) 
{
	var len=nameStr.length
	for (var i = 0; i < len; i++) 
		{
			var ch = nameStr.substring(i, i + 1).charCodeAt(0);
			if (((ch>64 && ch<91) || (ch>96 && ch<123) || ch ==32)==false)
				return("Only letters & spaces are accepted.");				
		}
	return ("Yes");
}
function cc_cardtype(number) {

    number = number.replace(/\D/g, "");

    if (number.substr(0,1) == "4") return "VISA card";
    if (number.substr(0,1) == "5") return "MasterCard";
    if (number.substr(0,1) == "6") return "Discover card";
    if (number.substr(0,2) == "37") return "American Express card";
    if (number.substr(0,1) == "3") return "Diner's Club, Transmedia, or other dining/entertainment card";
    return "Unknown";
}

function cc_generate_last_digit(number) {
    var i, sum, weight;

    number = number.replace(/\D/g, "");
	sum = 0;
    for (i = 0; i < number.length; i++) 
	{
		weight = parseInt(number.substr(number.length -1 * (i + 1), 1), 10) * (2 - (i % 2));
		sum += ((weight < 10) ? weight : (weight - 9));
    }

    return (10 - sum % 10) % 10;
}

function cc_validate(number) {

    var i, sum, weight;

    number = number.replace(/\D/g, "");
	sum = 0;
	
    for (i = 0; i < number.length - 1; i++) 
	{
		weight = parseInt(number.substr(number.length -1 * (i + 2), 1), 10) * (2 - (i % 2));
		sum += ((weight < 10) ? weight : (weight - 9));
    }

    if (parseInt(number.substr(number.length -1, 1), 10) == (10 - sum % 10) % 10) return true;
    return false;
}

function isValidText(Text, Enters) {
	//Enters-for textareas;
	var i,ch,ch_;
	var str=Text;
	if (str=="")
		{
		return "Empty";
		}
	var c="";
	var len=str.length;
	for (i = 0; i < len; i++) 
		{	
		ch_=str.substring(i, i+1);
		ch = ch_.charCodeAt(0);
		if (ch==32 || (ch>63 && ch<127))
			c+=ch_;
		else if ((ch>32 && ch<64)) 
			c=c+"&#"+ch;
		else if (ch==13)
			{
			if (str.substring(i+1,i+2).charCodeAt(0)==10)
				{
				if (Enters=="yes")
					c+="<br>";
				else
					c+="&#13&#10";
				i++;
				}
			}
		else
			{
			return "noLat";
			}
		}
	return c;
}

function requieredField (valStr)
{
    if( valStr == "" )
    {
       return "This field is requiered";
    }
    return "Yes";
}


