

function TrimTheString ( pszStringtoTrim )
{
	var bflag = true;
	var i = 0;
	if ( IsWhitespace ( pszStringtoTrim ) == true )
		return "";
	while ( ( i < pszStringtoTrim.length ) && ( bflag ) )
	{
		retChar = pszStringtoTrim.charAt ( i++ );
		if ( retChar != " " ) bflag = false;
	}
	if ( bflag ) return "";
	var j = pszStringtoTrim.length-1;
	bflag = true;
	while ( ( j >= 0 ) && ( bflag ) ) 
	{
		retChar = pszStringtoTrim.charAt ( j-- );
		if ( retChar != " " ) bflag = false;
	}
	if ( bflag ) return "";
	pszStringtoTrim = pszStringtoTrim.substring ( i-1 ,j+2 );
	return pszStringtoTrim;
}

/*----------------------------------------------------------------------------------------
	Function Name		: IsWhitespace 
	Parameters			: pszStringtoCheck
	Purpose				: Checks for white spaces
	Creation Date		: June 12, 2002
	Last Modified Date	: June 12, 2002
	-------------------------------------------------------------------------------------------*/
function IsWhitespace ( pszStringtoCheck )
{
	var reWhitespace = /^\s+$/
	return ( IsEmpty ( pszStringtoCheck ) || reWhitespace.test ( pszStringtoCheck ) );
}
	
/*----------------------------------------------------------------------------------------
	Function Name		: IsEmpty 
	Parameters			: pszStringtoCheck
	Purpose				: Checks for empty string
	Creation Date		: June 12, 2002
	Last Modified Date	: June 12, 2002
	-------------------------------------------------------------------------------------------*/

function IsEmpty ( pszStringtoCheck ) {
	return ( ( pszStringtoCheck == null ) || ( pszStringtoCheck.length == 0 ) )
}

 /*----------------------------------------------------------------------------------------
	Function Name       : IsValidPhoneNo
	Parameters			: fieldName - The field to be validated. Eg. "document.frmTest.txtTheField"
	Purpose				: Validates Phone No
	Creation Date		: June 12, 2002
	Last Modified Date	: June 12, 2002
	-------------------------------------------------------------------------------------------*/
	
function IsValidPhoneNo ( TheNumber) {
	var valid = true
//Please add the character which should be allowed
	var GoodChars = "0123456789()-+ "
	var i = 0
	if (TrimTheString(TheNumber)=="") {
		// Return false if number is empty
		valid = false
	}
	for (i =0; i <= TheNumber.length -1; i++) {
		if (GoodChars.indexOf(TheNumber.charAt(i)) == -1) {
// Note: Remove the comments from the following line to see this
// for loop in action.
//alert(TheNumber.charAt(i) + " is no good.")
			valid = false
		} // End if statement
	} // End for loop
	return valid
}



	/*----------------------------------------------------------------------------------------
	Function Name       : IsCurrencyFloatSign
	Parameters			: pszFieldObj - The field to be validated. Eg. "document.frmTest.txtTheField"
						  pnPrecision - An integer for the precision of the decimal digits.
	Purpose				: Checks for numeric value and allows decimal depending on the 'pnPrecision' 
						  parameter. Also allows + or - sign at the beginning depending on the 
						  second parameter, 'pbAllowSign'.
	Creation Date		: June 12, 2002
	Last Modified Date	: June 12, 2002
	-------------------------------------------------------------------------------------------*/
function IsCurrencyFloatSign ( pszFieldObj ) 
{
		var szFieldValue = eval( pszFieldObj ).value
		var reTheRegExp = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/
		var pnPrecision = 2
		if ( reTheRegExp.test( TrimTheString ( szFieldValue ) ) == false ) {
				return -1047; //Please enter numeric value.
		}
		if ( ( pnPrecision >= ( ( TrimTheString ( szFieldValue ).length - 1 ) - TrimTheString ( szFieldValue ).indexOf ( "." ) ) ) || ( TrimTheString ( szFieldValue ).indexOf ( "." ) == -1 ) ) 
			return 0;
		else 
		{
			return -1048; //Field should contain only 2 decimal places
		}

	}
	
/*----------------------------------------------------------------------------------------
	Author				: SomRaj
	Function Name		: MoveNextPrev
	Parameters			: objPageNumber	- Hidden Object of Page Number
						  nextPrevAddValue	- (1 for Next) & (-1 for Previous)
	Purpose				: to be called when the next or previous button is clicked
	Creation Date		: 9th July 2003
	Last Modified Date	: 9th July 2003
	-------------------------------------------------------------------------------------------*/
function MoveNextPrev(objPageNumber, nextPrevAddValue)
{
	document.forms[0].reset()
	objPageNumber.value = parseInt(objPageNumber.value) + parseInt(nextPrevAddValue)
	document.forms[0].submit()
}

/*----------------------------------------------------------------------------------------
	Author				: Manish Tiwari
	Function Name		: SortOrderClicked
	Parameters			: objSortColumn	- Hidden Object of Sort Column
						  objSortOrder	- Hidden Object of Sort Order
						  objPageNumber	- Hidden Object of Page Number
						  ClickedSortID	- the row of the database column on which to sort.
	Purpose				: to be called with appropriate params when a sort button is clicked.
	Creation Date		: 9th July 2003
	Last Modified Date	: 9th July 2003
	-------------------------------------------------------------------------------------------*/
function SortOrderClicked(objSortColumn, objSortOrder, objPageNumber, ClickedSortID)
{
	document.forms[0].reset()		// reset all the changes made after clicking on the search button

	if ( TrimTheString(objSortColumn.value) == ClickedSortID)		// if the current search column and clicked are same
	{
		if ( TrimTheString(objSortOrder.value) == TrimTheString("Asc"))	// if currently order is "Asc"
			objSortOrder.value = "Desc"									// then change to "Desc"
		else
			objSortOrder.value = "Asc"									// Else change to "Asc"
	}
	else																// if both columns are not same
	{
		objSortOrder.value = "Asc"										// assign to the "Asc" Order
	}

    objSortColumn.value = ClickedSortID				// assign the current sort column to clicked column
    objPageNumber.value = 1							// set back the page number to 1
    document.forms[0].submit()						//	submit the page so that the desired result set is got.
}

// Check whether string s is empty.
// returns true if the string is empty
function IsEmpty(StringToCheck)
{   
	return ((StringToCheck == null) || (StringToCheck.length == 0))
}

 /*----------------------------------------------------------------------------------------
	Function Name		: ValidateEmail 
	Parameters			: field object
	Purpose				: Validates Email ID 
	Creation Date		: Aug 06, 2002
	Last Modified Date	: Aug 06, 2002
	Example				: ValidateEmail(document.forms[0].TxtEmail)
	-------------------------------------------------------------------------------------------*/
function ValidateEmail ( pszFieldObj )
{
	var reEmail = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.([a-z]){2,4})$/
	var szBadStrings = " ~`!#$%^&*()+=[{]}|\<>?,:';";
	var szCurrChar;

	szFieldValue = TrimTheString( eval ( pszFieldObj ).value );
	szFieldValue = szFieldValue.toLowerCase();
	for ( var i=0 ; i < szFieldValue.length ; i++)
	{
		j = i + 1;
		szCurrChar = szFieldValue.substring ( i , j );
		if ( szBadStrings.indexOf ( szCurrChar ) != -1 )
		{		
			return false;
		}
	}
	if ( reEmail.test ( szFieldValue ) == false )
	{
		return false;
	}
	return true;

}


function ValidateSpecialChars(pszFieldObj)
{
	var szBadStrings = " ~`!#$%^&*()+=[{]}|\<>?,:';<>";
	
	szFieldValue = TrimTheString( eval ( pszFieldObj ).value );
	szFieldValue = szFieldValue.toLowerCase();
	for ( var i=0 ; i < szFieldValue.length ; i++)
	{
		j = i + 1;
		szCurrChar = szFieldValue.substring ( i , j );
		if ( szBadStrings.indexOf ( szCurrChar ) != -1 )
		{		
			return false;
		}
	}
	return true;
}
//Added by iftakhar on 05-Dec-2007 to use it in ProductReveiew.aspx page
function ValidateSpecialCharsWithoutBlankSpace(pszFieldObj)
{
	var szBadStrings = "~`!#$%^&*()+=[{]}|\<>?,:';<>";
	
	szFieldValue = TrimTheString( eval ( pszFieldObj ).value );
	szFieldValue = szFieldValue.toLowerCase();
	for ( var i=0 ; i < szFieldValue.length ; i++)
	{
		j = i + 1;
		szCurrChar = szFieldValue.substring ( i , j );
		if ( szBadStrings.indexOf ( szCurrChar ) != -1 )
		{		
			return false;
		}
	}
	return true;
}   

 /*----------------------------------------------------------------------------------------
	Function Name		: IsValidDate
	Parameters			: pszFieldObj(Like document.formName.FieldName)
	Purpose				: The Function Checks the Valid Date. 
	Creation Date		: Oct 04, 2003
	Last Modified Date	: Oct 04, 2003
	-------------------------------------------------------------------------------------------*/
		
function IsValidDate ( pszFieldObj )
{
	var szTheDate = TrimTheString( eval ( pszFieldObj ).value )
	var reTheRegExp = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var aMatchArray = szTheDate.match(reTheRegExp); // is the format ok?

	if (aMatchArray == null) 
	{
		return 1453;
	}

	nMonth = aMatchArray[1]; // parse date into variables
	nDay = aMatchArray[3];
	nYear = aMatchArray[5];
	
	if ( nYear < 1900 )
	{
		//alert("Year must be greater than 1900.");
		return 1454;
	}

	if ( nMonth < 1 || nMonth > 12 ) // check month range
	{
	//	alert("Month must be between 1 and 12.");
		return 1453;
	}

	if ( nDay < 1 || nDay > 31 ) 
	{
	//	alert("Day must be between 1 and 31.");
		return 1453;
	}

	if ( ( nMonth == 4 || nMonth == 6 || nMonth == 9 || nMonth == 11) && nDay == 31 ) 
	{
	//	alert("Month " + nMonth + " does not have 31 days!")
		return 1453;
	}

	if ( parseInt ( nMonth ) == 2) // check for february 29th
	{
		var isleap = ( nYear % 4 == 0 && ( nYear % 100 != 0 || nYear % 400 == 0 ) );
		if ( parseInt ( nDay ) > 29 || ( parseInt ( nDay ) == 29 && !isleap ) ) 
		{
	//		alert("February " + nYear + " doesn't have " + nDay + " days!");
			return 1453;
		}
	}
	return 1; // date is valid
}


/******************************************************************************
DESCRIPTION: Validates that a string contains only numeric values.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
******************************************************************************/
 function CheckNumericValue(strValue)
{ 
	var objRegExp  = /^\d*$/;
	return objRegExp.test(strValue);
}
/**************************************************************************************/
function CheckAlphabet(strValue)
{
	var objRegExp = /^[a-zA-Z.\s']+$/;
	return objRegExp.test(strValue);
}

/**************************************************************************************/
function CheckAlphaNumeric(strValue)
{
	var objRegExp = /^[a-zA-Z0-9.\s']+$/;
	return objRegExp.test(strValue);
}

function CheckDateDiff(objStartDate, objEndDate)
{
	var _StartVal = new Date(eval(objStartDate).value);
	var _EndVal = new Date(eval(objEndDate).value);
	var _DaysDiff =  _EndVal - _StartVal
	_DaysDiff = Math.round(_DaysDiff/1000/60/60/24)
	
	return _DaysDiff;
}

/******************************************************************************/
 /*----------------------------------------------------------------------------------------
	Function Name		: CheckZipCode
	Parameters			: strValue
	Purpose				: The Function Checks the Valid Zip code ( or numbers), 
						  it should not include all zero's. 
	Creation Date		: 16-Feb-2005
	Last Modified Date	: 16-Feb-2005
	-------------------------------------------------------------------------------------------*/
 function CheckZipCode(strValue)
{  
	var objRegExp  = /^\d*$/;
	return objRegExp.test(strValue);
}
/**************************************************************************************/

function TestFileType( fileName, fileTypes ) 
	{
		
		var _FileType;
		var _FileExtension = "";
		var _count = 0;
		
		if (!fileName) return false;
		_FileType = fileTypes.split(",")
		if (fileName.lastIndexOf(".") > 0)
		{
			_FileExtension = fileName.substring(fileName.lastIndexOf(".")+1, fileName.length)
			for (_count = 0; _count <_FileType.length; _count ++ )
			{
				if (TrimTheString(_FileExtension).toUpperCase() == TrimTheString(_FileType[_count]).toUpperCase())
				{
					return true
				}
			}
			return false;
		}
	}
	
	function CheckDaysDiff(StartDate, EndDate)
	{	
		var _StartVal = new Date(StartDate);
		var _EndVal = new Date(EndDate);
		var _DaysDiff =  _EndVal - _StartVal
		_DaysDiff = Math.round(_DaysDiff/1000/60/60/24)
	
		return _DaysDiff;
	}	
	
	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;
   }
   
   function CheckAlphabetWithSpace(strValue)
	{
		var objRegExp = /^[a-zA-Z.\s']+$/;
		return objRegExp.test(strValue);
	}
	
	
	function CheckAlphabetWithoutSpace(strValue)
	{
		var objRegExp = /^[a-zA-Z']+$/;
		return objRegExp.test(strValue);
	}
	
	/*----------------------------------------------------------------------------------------
	Function Name		: IsSmallLongInt 
	Parameters			: pszFieldObj, pszMaxValue
	Purpose				: Validates the Numeric field
	Creation Date		: June 12, 2002
	Last Modified Date	: June 12, 2002
	-------------------------------------------------------------------------------------------*/
			
function IsSmallLongInt ( pszFieldObj, pszMaxValue )
{
	if ( TrimTheString( pszMaxValue ) == "" )
	{
		pszMaxValue = "SMALLINT";
	}
	var pnMaxValue;
	var szFieldValue = eval( pszFieldObj ).value
	if ( isNaN( TrimTheString( szFieldValue ) ) )
	{
		return 1070;
	}
	else
	{
		if ( TrimTheString( pszMaxValue ).toUpperCase() == "SMALLINT")
			pnMaxValue = 32767;
		else if ( TrimTheString( pszMaxValue ).toUpperCase() == "INT")
			pnMaxValue = 2147483647;
		else
			pnMaxValue = parseInt(pszMaxValue);
	
		if ( szFieldValue > pnMaxValue )
		{
			return 1071;
		}
		else
		{
			return 0;
		}
	}
}

/*----------------------------------------------------------------------------------------
	Author				: Manish Tiwari
	Function Name		: IsPositiveInt
	Parameters			: fieldObject
	Purpose				: Validate wheather the data is a Positive Integer
	Creation Date		: August 21, 2003
	Last Modified Date	: August 21, 2003
	Comments			: Returns true if the field value is Positive.
	-------------------------------------------------------------------------------------------*/
function IsPositiveInt(FieldName){
	FieldName = eval(FieldName);
	if (isNaN(FieldName.value))	{
		return false;
	}
	else if(FieldName.value <=0){
			return false
		 }
	else
	return true;
	}
 /*----------------------------------------------------------------------------------------
	Function Name		: CheckCreditCardNumber
	Parameters			: objCrediCard
	Purpose				: To check the Credit Card Number
	Creation Date		: Oct 01, 2003
	Last Modified Date	: Oct 01, 2003
	-------------------------------------------------------------------------------------------*/

function CheckCreditCard(CardNumber)
	{
		var loopCounter;
		var FirstDigitsSub = 0;
		var SecondDigitsSum = 0;
		var TempSecondSum = "";
		var LoopValue = 0;
		var CurrentNumber = 0;
		var TotalLengthODD = 0;
		

		// Only if the number passed is numeric and is more than 14 chars length
		if ( IsSmallLongInt (CardNumber, '9999999999999999') == 0 && CardNumber.value.length >= 14) 
		{
			//added by manish
			if (CardNumber.value == 0 ) //if card no is zero ie all input is zero.
			{
				return false
			}
			// add over
			// Implementation of LUHN Formula.
			if ( (CardNumber.value.length % 2) == 0)
				TotalLengthODD = 1
			else
				TotalLengthODD = 0

			var cardnumbervalue = CardNumber.value;
			for(loopCounter = cardnumbervalue.length-1; loopCounter >= 0; loopCounter--)
			{
				CurrentNumber = parseInt( cardnumbervalue.substr(loopCounter, 1))
				if ( ( loopCounter % 2) == TotalLengthODD)
					FirstDigitsSub += CurrentNumber 
				else
				{
					CurrentNumber *= 2;
					if ( CurrentNumber > 9)
					{
						TempSecondSum = "" + CurrentNumber
						CurrentNumber = parseInt( TempSecondSum.substr(0, 1)) + parseInt( TempSecondSum.substr(1, 1))
					}
					CurrentNumber 
					SecondDigitsSum += CurrentNumber;
				}
				LoopValue = CurrentNumber 
			}
			if ( ( (SecondDigitsSum + FirstDigitsSub ) % 10 ) == 0 )
				return true;
			else
				return false;
		}
		else
			return false;
	}
//added by iftakhar on 11-Dec-2007
function IsValidUSPhoneNo(TheNumber)
	{ 
		var strPhone
		strPhone=TheNumber;
		if ( strPhone.length > 0)
		{
			var objRegExp = /^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$/ ;
			if (strPhone.search(objRegExp) < 0)
			{
				return false;
			}
			return true;
	    }
	    return true;
	}