function isNumber(input) {
	var str=input.value;
	var len = input.value.length ;

	for( var index=0;index<len;index++) {
		var k=parseInt(str.charAt(index))
		if(isNaN(k)) {
			return false;
		}
	}

	return true;
}

function removeChar(input, ch) {
	var len = input.length;
	var newStr = '';

	for(index=0;index<len;index++) {
		if(input.charAt(index)!=ch) {
			newStr = newStr + input.charAt(index);
		}
	}
	return newStr;
}

function Trim(input) { return removeChar(input, ' '); }

function removeHyphens(input) { return removeChar( input, '-' ); }

function isEmpty(input){
	var str = input.value;
	if (!str) return true;
	var spacechars = " \t\n\r";
	for (var i=0; i < str.length; i++){   
		if (spacechars.indexOf(str.charAt(i)) == -1) return false;
	}
	return true;
} 

// We disallow single quotes in input data
function checkString(input) {
	input=Trim(input);
	if(input.length == 0) return 1; 

	var str=input;
	var len = input.length ;
	
	for( var index=0;index<len;index++) {
		if((str.charAt(index)=='\"') || 
			(str.charAt(index)=='\'') || 
			(str.charAt(index)=='\\'))
		{
			return 2;
		}
	}

	return 3;
}

function isLeapYear(year)
{
	var retval = false;
	if( ((year % 4 ) == 0) && !((year % 100) == 0) )
		retval = true;
	else 
		retval = ((year % 400) == 0);

	return retval;
}

// This checks if the date is more than current date
function isDateValid(yearval, monthval, dayval)
{
	nsBrowser=window.navigator.appName == "Netscape";
	var today = new Date();
	var currentYear = today.getYear();

	if((nsBrowser)&&(currentYear <= 200)){ 
		currentYear += 1900; 
	}

	var currentMonth = today.getMonth()+1;
	var currentDay = today.getDate();

	if(yearval > currentYear) {	
		return false;		
	}

	if(yearval == currentYear) {
		if(monthval > currentMonth){	
			return false;			
		}
		if((monthval == currentMonth) && (dayval > currentDay)) {			
			return false;
		}
	}
	return true;
}

/************************************************************
 * Error codes 
 * 1 - Success
 * 2 - Number of days invalid for selected month
 * 3 - Month not selected
 * 4 - Day not selected
 * 5 - Data entered in year is not numeric
 * 6 - Year is less than 1900
 * 7 - Date value is more than current date
 * 8 - No input for year 
 * 9 - Invalid character
 ************************************************************
*/
function validateDate(monthele, dayele, yearele, isCompulsory) {
	var monthval = monthele.selectedIndex;
	var dayval = dayele.selectedIndex;
	var yearval = yearele.value;
	var retval = 2;		// Invalid date
	var chkval = checkString(yearval);

	if (!isCompulsory) {
		if (monthval == 0 && dayval == 0 && chkval == 1) {
			return true;
		}
	}

	if(monthval == 0)	{ monthele.focus(); return 3; }
	if(dayval == 0)		{ dayele.focus(); return 4; }
	if(chkval == 1)		{ yearele.focus(); return 8; }
	if(chkval == 2)		{ yearele.focus(); return 9; }

	if(!isNumber(yearele))	{ yearele.focus(); return 5; }
	if(yearval < 1900)		{ yearele.focus(); return 6; }

	if(!isDateValid(yearval, monthval, dayval)) {
		yearele.focus();		
		return 7;
	}

	if (monthval == 4 || monthval == 6 || monthval == 9 || monthval == 11) {
		if(dayval >= 1 && dayval <= 30) 
			retval = 1;
	} else {		// Month is February
		if(monthval == 2) {
			if(isLeapYear(yearval))	{
				if(dayval >= 1 && dayval <= 29)
					retval = 1;
			} else {
				if(dayval >= 1 && dayval <= 28)
					retval = 1;
			}
		} else {
			retval = 1;
		}
	}

	return retval;
}

/************************************************************
 * Input parameters
 * inputele		- Form element to validate
 * numdigits	- Number of digits expected for element (3/4)
 * optional		- true for compulsory entry, otherwise false.
 * 
 * USED FOR PHONE AND FAX NUMBERS.
 * 
 * Error codes
 * 1	- Success
 * 2	- Blank
 * 3	- Not numeric
 * 4	- Not enough digits
 ************************************************************
*/
function validatePhone(inputele, numdigits, optional) {
	var input = inputele;

	if(Trim(input.value).length == 0)
		inputele.focus();
		return (optional) ? 1 : 2;

	if(!isNumber(input)) {
		inputele.focus();
		return 3 ;
	}

	if(Trim(input.value).length!=numdigits) {
		inputele.focus();
		return 4;
	}
	return 1;
}

/************************************************************
 * Input parameters
 * inputele		- Form element to validate
 * 
 * Error codes
 * 1	- Success
 * 2	- Blank
 * 3	- Invalid Character
 * 4	- Invalid mail address
 ************************************************************
*/
function validateMailAddress(inputele) {
	var input = inputele;
	var str=input.value;  
	var atCount=0;                  
	var spaceCount =0;
	var dotCount =0;
	var len=input.value.length;

	var chkVal = checkString(input.value);
	
	if(chkVal==1) {	
		inputele.focus();
		return 1;
	}

	if(chkVal == 2) {
		inputele.focus();
		return 2;
	}
	
	for(i=0;i<len;i++){	
		if(str.charAt(i)=="@") { atCount++; }
		if(str.charAt(i)==" ") { spaceCount++; }
		if(str.charAt(i)==".") { dotCount++; }
	}
	
	if(atCount==0||atCount>1||spaceCount!=0||dotCount==0) {
		inputele.focus();
		return 3;
	}
	return 4;
}

function validateEMail(inputEle){
	var res=validateMailAddress(inputEle);
	if (res==1){
		alert("Please enter Email Address");
		inputEle.focus();
		return false;
		
	} else if (res==2 || res==3){
		alert("Invalid Email Address");
		inputEle.focus();
		return false;
		
	}
	return true;
}


/************************************************************
 * Input parameters
 * inputele		- Form element to validate
 * minChars		- Minimum number of characters to check
 * 
 * Error codes
 * 1	- Success
 * 2	- Blank
 * 3	- Invalid character in input
 * 4	- Less than minimum number of characters
 ************************************************************
*/
function validateName(inputele, minChars) {
	result = checkString(inputele.value);

	switch (result){
		case 1: inputele.focus(); return (minChars != 0) ? 2 : 1;
		case 2: inputele.focus(); return 3;
	}

	if (minChars != 0 && inputele.value.length < minChars) {
		inputele.focus();
		return (minChars != 0) ? 4 : 2;
	}

	return 1;
}

/************************************************************
 * Input parameters
 * pwdEle		- Form element to validate
 * nameEle		- Respective login name element
 * minChars		- Minimum number of characters to check
 *
 * Error codes
 * 1	- Success
 * 2	- Blank password
 * 3	- Invalid character in input
 * 4	- Less than minimum number of characters
 * 5	- User ID and Password are same
 ************************************************************
*/
function validateLoginPassword(pwdEle, nameEle, minChars) {
	result = checkString(pwdEle.value);

	switch (result){
	case 1:
		pwdEle.focus();
		return 2;

	case 2:
		pwdEle.focus();
		return 3;
	}

	if (minChars != 0 && pwdEle.value.length < minChars) {
		pwdEle.focus();
		return 4;
	}

	if (pwdEle.value == nameEle.value) {
		pwdEle.focus();
		return 5;
	} 

	return 1;
}

function selectChoice(ele, val) {
	for (i=0; i<ele.options.length; i++) {
		if (ele.options[i].value == val) {
			ele.options[i].selected = true;
			break;
		}
	}
}

function selectRadio(ele, val) {
	for (i=0; i<ele.length; i++) {
		if (ele[i].value == val) {
			ele[i].checked = true;
			break;
		}
	}
}

function isRadioSelected(ele, errMsg) {
	for (i=0; i<ele.length;i++){
		if (ele[i].checked) {
			return true;
		}
	}

	alert(errMsg);
	ele[0].focus();
	return false;
}

function validateSelect(inputEle, message) {
	if (inputEle.selectedIndex==0)
	{
		alert(message);
		inputEle.focus();
		return false;
	}
	return true;
}

function validateTextArea(ele, dispName, maxChars, compulsory) {
	if (!validateString(ele, dispName, compulsory, false))		{ return false; }

	if (maxChars != 0 && ele.value.length > maxChars) {
		ele.focus();
		alert("Max. number of characters allowed : " +maxChars);
		return false;
	}

	return true;
}

function validateString(ele, eleName, compulsory, checkSPCH) {
	var val = ele.value;
	result = checkString(val);

	switch (result){
	case 1:
		if (compulsory) {
			ele.focus();
			alert("Please enter " +eleName);
			return false;

		} else {
			return true;
		}

	case 2:
		if (checkSPCH) {
			ele.focus();
			alert("Invalid character in " +eleName+ " value ");
			return false;

		} else {
			return true;
		}
	}

	return true;
}

function validateNumber(ele, eleName, compulsory, digits) {
	if (!compulsory && isEmpty(ele)) {
		return true;
	}

	if (isEmpty(ele)) {
		ele.focus();
		alert('Please enter value for ' +eleName);
		return false;
	}

	if (!isNumber(ele)) {
		ele.focus();
		alert('Please enter valid number for ' +eleName);
		return false;
	}

	if (digits != 0 && ele.value.length < digits) {
		ele.focus();
		alert('Please enter atleast ' +digits+ ' digits for ' +eleName);
		return false;
	}

	return true;
}

function validateLocalDate(monthele, dayele, yearele, compulsory){
	var res = validateDate(monthele, dayele, yearele, compulsory);

	if (res == 2) {
		alert( 'Invalid Date \n[Number of days invalid for selected month]' );
	} else if (res == 3) {
		alert( 'Invalid Date \n[Month not selected]' );
	} else if (res == 4) {
		alert( 'Invalid Date \n[Day not selected]' );
	} else if (res == 5) {
		alert( 'Invalid Date \n[Data entered in year is not numeric]' );
	} else if (res == 6) {
		alert( 'Invalid Date \n[Year is less than 1900]' );
	} else if (res == 7) {
		alert( 'Invalid Date \n[Date value is more than current date]' );
	} else if (res == 8) {
		alert( 'Invalid Date \n[No input for year]' );
	} else if (res == 9) {
		alert( 'Invalid Date \n[Invalid character]' );
	}

	if(res != 1)	
		return false;
	else 
		return true;
}