//====================================================================================================
//	File Name		:	validate.js
//----------------------------------------------------------------------------------------------------
//	Purpose			:	Client side validation in JavaScript.
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//	Email			:	parimal_gajjar@hotmail.com
//	History			:
//						Date				Author					Remark
//						27-May-2005			Parimal Gajjar		Initial Release
//
//====================================================================================================

//====================================================================================================
//	Function Name	:	IsEmpty
//	Purpose			:	checks whether a field has value or is blank, it returns false if a field
//						is empty otherwise true.
//	Parameters		:	fld	-	field name to be checked
//					    msg -   error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//----------------------------------------------------------------------------------------------------
function IsEmpty(fld,msg)
{
	var regex = /^[ ||\r\n]*$/;
	if(regex.test(fld.value))
	{
		if(msg != '')
		{
			alert(msg);
			fld.focus();
		}
		return false;
	}
	return true;
	
	/*
	if((fld.value == "" || fld.value.length == 0) && (msg == ''))
	{
		return false;
	}
	if(fld.value == "" || fld.value.length == 0)
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
	*/
}

//====================================================================================================
//	Function Name	:	IsEmail
//	Purpose			:	checks Email validity. Email must have character @ followed by one or more
//						dots. It returns flase if Email is invalid otherwise true.
//	Parameters		:	fld	-	field name to be checked
//					    msg -   error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//----------------------------------------------------------------------------------------------------
function IsEmail(fld,msg)
{
//	var regex = /^[\w]+(\.[\w]+)*@([\w]+\.)+[a-zA-Z]{2,7}$/ ; -- Used recent
//	var regex = /^[0-9A-Zaw]+(\.[\w]+)*@([\w]+\.)+[a-zA-Z]{2,7}$/ ;
	var regex = /^[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]$/ ;

	if(!regex.test(fld.value))
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}

//====================================================================================================
//	Function Name	:	IsValidString
//	Purpose			:	checks if field value contains only alphanumeric and '_' charactes. Also checks
//						that alphabetical chars. and '_' must have to be come first and followed by
//						numbers. It returns false if above conditions will not satisfy otherwise true.
//	Parameters		:	fld	-	field name to be checked
//					    msg -   error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//----------------------------------------------------------------------------------------------------
function IsValidString(fld,msg)
{
	var regex = /^[_]*[a-zA-Z_@]+[a-zA-Z0-9_@]+$/;
	if(!regex.test(fld.value))
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}

//====================================================================================================
//	Function Name	:	IsPassword
//	Purpose			:	checks if field value has number of characters between two specified limits.
//						It returns false if no. of chars. is < min. length or > max. length
//						otherwise true.
//	Parameters		:	fld	   - field name to be checked//						
//					    msg    -   error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//----------------------------------------------------------------------------------------------------

function IsPassword(fld,msg)
{
	var regex = /^[_]*[a-zA-Z0-9]+[a-zA-Z0-9]*$/;
	if(!regex.test(fld.value))
  	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}

//====================================================================================================
//	Function Name	:	IsAlphaNumeric
//	Purpose			:	
//						
//						
//	Parameters		:	fld	   - field name to be checked//						
//					    msg    -   error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//----------------------------------------------------------------------------------------------------

function IsAlphaNumeric(fld,msg)
{
	var regex = /^[a-zA-Z0-9]+[a-zA-Z0-9]*$/;
	if(!regex.test(fld.value))
  	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}


//====================================================================================================
//	Function Name	:	IsLen
//	Purpose			:	checks if field value has number of characters between two specified limits.
//						It returns false if no. of chars. is < min. length or > max. length
//						otherwise true.
//	Parameters		:	fld	   - field name to be checked
//						minlen - minimum length of a field
//						maxlen - maximum length of a field
//					    msg    -   error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//----------------------------------------------------------------------------------------------------
function IsLen(fld, minlen, maxlen, msg)
{
	if(fld.value.length < minlen || fld.value.length > maxlen)
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}


//====================================================================================================
//	Function Name	:	IsZip
//	Purpose			:	checks if zip field value is of length 5 or 9 . (for U.S. zip code).
//						It returns false if it contains alphabetic chars. or length is not as
//						specified.
//	Parameters		:	fld	-  field name to be checked
//					    msg -  error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//----------------------------------------------------------------------------------------------------
function IsZip(fld,msg)
{
	var num = /^[\d]+$/;
	var num = /^[a-zA-Z0-9]+[a-zA-Z0-9]*$/;
	if(!num.test(fld.value) || (fld.value.length !=5 && fld.value.length !=6))
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}

function isInteger(s)
{
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
		if(i == 0)
		{
			if(c != "-")
			{
				if (((c < "0") || (c > "9") )) return false;
			}
			else
			{
					if(s.length == 1) return false;
			}
		}
		else
		{
			if (((c < "0") || (c > "9"))) return false;
		}
    }
    // All characters are numbers.
    return true;
}

function allDigits(str)
{
	//alert('here');
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset)
{
	var result = true;
	
	for(var i=0;i<str.value.length;i++)
	{		
		if (charset.indexOf(str.value.substr(i,1))<0)
		{
			result = false;
			break;
		}
	}	
	return result;
}


//====================================================================================================
//	Function Name	:	checkFileType
//	Purpose			:	It checks the file type. It must be either doc or pdf.
//	Parameters		:	fld -  field name containig file name
//						msg -  error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//----------------------------------------------------------------------------------------------------
function checkFileType(fld,msg)
{
	var regex = /(.doc|.pdf)$/i;
	if(!regex.test(fld.value))
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}

//====================================================================================================
//	Function Name	:	checkImageType
//	Purpose			:	It checks the image type. It must be either jpg.
//	Parameters		:	fld -  field name containig image file name
//						msg -  error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//----------------------------------------------------------------------------------------------------
function checkImageType(fld,msg)
{
	var regex = /(.jpg|.jpeg)$/i;
	if(!regex.test(fld.value.toLowerCase()))
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}


//====================================================================================================
//	Function Name	:	checkValidImageType
//	Purpose			:	It checks the valid image type. It must be either jpg or gif.
//	Parameters		:	fld -  field name containig image file name
//						msg -  error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	27-May-2005
//----------------------------------------------------------------------------------------------------
function checkValidImageType(fld,msg)
{
	var regex = /(.jpg|.jpeg|.gif)$/i;
	if(!regex.test(fld.value.toLowerCase()))
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}

//====================================================================================================
//	Function Name	:	checkGifImageType
//	Purpose			:	It checks the Gif image type. It must be gif.
//	Parameters		:	fld -  field name containig image file name
//						msg -  error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	04-Jun-2005
//----------------------------------------------------------------------------------------------------
function checkGifImageType(fld,msg)
{
	var regex = /(.gif)$/i;
	if(!regex.test(fld.value.toLowerCase()))
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}

//====================================================================================================
//	Function Name	:	checkValidFontType
//	Purpose			:	It checkes the valid font type
//	Parameters		:	fld -  field name containig image file name
//						msg -  error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	04-Jun-2005
//----------------------------------------------------------------------------------------------------
function checkValidFontType(fld,msg)
{
	var regex = /(.ttf)$/i;
	if(!regex.test(fld.value.toLowerCase()))
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}

//====================================================================================================
//	Function Name	:	checkPdfFileType
//	Purpose			:	It checks the PDF file type. 
//	Parameters		:	fld -  field name containig file name
//						msg -  error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	20-Feb-2006
//----------------------------------------------------------------------------------------------------

function checkPdfFileType(fld,msg)
{
	var regex = /(.pdf)$/i;
	if(!regex.test(fld.value.toLowerCase()))
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}

//====================================================================================================
//	Function Name	:	checkPdfJpegFileType
//	Purpose			:	It checks the PDF file type. 
//	Parameters		:	fld -  field name containig file name
//						msg -  error message to be displayed
//	Return			:	true or false
//	Author			:	Parimal Gajjar
//	Creation Date	:	20-Feb-2006
//----------------------------------------------------------------------------------------------------

function checkPdfJpegFileType(fld,msg)
{
	var regex = /(.jpg|.jpeg|.pdf)$/i;
	if(!regex.test(fld.value.toLowerCase()))
	{
		alert(msg);
		fld.focus();
		return false;
	}
	return true;
}

/**
 * DHTML phone number validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */

// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;
/*
function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}
*/
function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
s=stripCharsInBag(strPhone,validWorldPhoneChars);
return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

