/**************************************************
	Created on 12-05-2007 (Sandeep S)
	File: validations.js
	Include-file for validations
**************************************************/


var doc = "document.";
var alphabets= /[a-zA-Z]/;
var nameFilter= /^[a-zA-Z\'\-\s]+$/;
var startNameFilter = /^[a-zA-Z]$/;
var nameGenFilter = /^[0-9a-zA-Z\-\s\'\!\@\#\$\%\^\&\*\(\)\-\_\+\?\.\:\;\[\]\/\,\"\=]+$/;
var startGenNameFilter = nameGenFilter;
var phoneFilter = /^[0-9\-\(\)\s\+]+$/;
var startPhoneFilter = /^[0-9\+\(]$/;
var numberFilter = /^[0-9]+$/;
//var emailFilter=/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
var emailFilter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i ;
var unameFilter = /^[0-9a-zA-Z\-\_\.]+$/;
var stringFilter = /^[a-zA-Z\s]+$/;

// Checking a field whether it is blank after trimming the white spaces at the ends.
function checkBlank(formName,fieldName,fieldNameString){
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(inputVal.length == 0){
   return errorAlert(formName,fieldName, "The field \""+fieldNameString+"\" should have a valid content.");
 }
 return true;
}
//check the existance of alphabets
function checkAlpha(formName,fieldName,fieldNameString){
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!alphabets.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 return true;
}
// Check for a valid name.
function checkName(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 if(!regName(formName,fieldName,fieldNameString)){
   return false;
}
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(findUniqueChars(inputVal).length <= 1){
   return errorAlert(formName,fieldName, "The \""+fieldNameString+"\" you entered does not seem to be valid.");
 }
 return true;
}
function checkLastName(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 if(!regName(formName,fieldName,fieldNameString)){
   return false;
}
 return true;
}
// Check Any other Names like company-name etc.
function checkGenName(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 if(!regGenName(formName,fieldName,fieldNameString)){
   return false;
}
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(numberFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 if(!checkAlpha(formName,fieldName,fieldNameString)){
   return false;
 }
 return true;
}
function checkPhone(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!phoneFilter.test(inputVal) || !startPhoneFilter.test(inputVal.charAt(0))){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 if(findUniqueChars(inputVal).length <= 1 || inputVal.length < 10){
   return errorAlert(formName,fieldName, "The \""+fieldNameString+"\" you entered does not seem to be valid.");
 }
 return true;
}
function checkZip(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!numberFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 return true;
}
function checkEmail(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!emailFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 if(!validateEmail(inputVal,true,true)){
   return false;
 }
 return true;
}
function checkUname(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!unameFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 if(inputVal.length < 5){
   return errorAlert(formName,fieldName,"Username should have at least 5 characters.");
 }
 return true;
}
function checkPasswords(formName,fieldName1,fieldName2,passMinLen,passMaxLen){
 if(!checkBlank(formName,fieldName1,"Password")){
   return false;
 }
 var inputVal1 = Trim(eval(doc+formName+"."+fieldName1+".value"));
 var inputVal2 = Trim(eval(doc+formName+"."+fieldName2+".value"));
 if(inputVal1 != inputVal2){
   return errorAlert(formName,fieldName1,"The passwords do not match. Please try again.");
 }
 if(!checkPasswordLength(formName,fieldName1,passMinLen,passMaxLen)){
   return false;
 }
 return true;
}
function checkCountry(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!stringFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 return true;
}
// Supporting Functions.
// check a general name.
function checkPasswordLength(formName,fieldName,passMinLen,passMaxLen){
var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(inputVal.length < passMinLen || inputVal.length > passMaxLen){
    return errorAlert(formName,fieldName,"The password string should have a length between "+passMinLen+" and "+passMaxLen);
 }
 return true;
}
function regGenName(formName,fieldName,fieldNameString){
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!nameGenFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid Characters in the field \""+fieldNameString+"\"");
 }
 if(!startGenNameFilter.test(inputVal.charAt(0))){
   return errorAlert(formName,fieldName, "The \""+fieldNameString+"\" you entered does not seem to be valid.");
 }
 if(findUniqueChars(inputVal).length <= 1){
   return errorAlert(formName,fieldName, "The \""+fieldNameString+"\" you entered does not seem to be valid.");
 }
 return true;
}
// check for a valid name
function regName(formName,fieldName,fieldNameString){
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!nameFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid Characters in the field \""+fieldNameString+"\"");
 }
 if(!startNameFilter.test(inputVal.charAt(0))){
   return errorAlert(formName,fieldName, "The \""+fieldNameString+"\" you entered does not seem to be valid.");
 }
 return true;
}
/*
function findUniqueChars(str){
 arrChars = str.split('');
 alert(arrChars);
 var countArr = 0;
 var checkArr = [];
 for(ii=0; ii<arrChars.length; ii++){
   if(checkArr.indexOf(arrChars[ii]) == -1){
      checkArr[countArr] = arrChars[ii];
      countArr++;
   }
 }
 return checkArr;
}*/

function findUniqueChars(str){
 arrChars = str.split('');
 checkArr = unique(arrChars);
// alert(checkArr);
 return checkArr;
}
function unique(a) {
	tmp = new Array(0);
	for(i=0;i<a.length;i++){
		if(!contains(tmp, a[i])){
			tmp.length+=1;
			tmp[tmp.length-1]=a[i];
		}
	}
	return tmp;
}
function contains(a, e) {
	for(j=0;j<a.length;j++)if(a[j]==e)return true;
	return false;
}
// Error Alerter.
function errorAlert(formName,fieldName, msg){
 alert(msg);
 eval(doc+formName+"."+fieldName+".focus()")
 return false;
}
// Trim Function. Function to trim the starting and ending white spaces of a string.
function Trim(str) {
 return LTrim(RTrim(str));
}
function LTrim(str) { 
 for (var ii=0; ii<str.length && str.charAt(ii)<=" " ; ii++) ;
 return str.substring(ii,str.length);
}
function RTrim(str) {
 for (var ii=str.length-1; ii>=0 && str.charAt(ii)<=" " ; ii--) ;
 return str.substring(0,ii+1);
}

function validateEmail(addr,man,db) {
if (addr == '' && man) {
   if (db) alert('email address is mandatory');
   return false;
}
if (addr == '') return true;
var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
for (i=0; i<invalidChars.length; i++) {
   if (addr.indexOf(invalidChars.charAt(i),0) > -1) {
      if (db) alert('email address contains invalid characters');
      return false;
   }
}
for (i=0; i<addr.length; i++) {
   if (addr.charCodeAt(i)>127) {
      if (db) alert("email address contains non ascii characters.");
      return false;
   }
}

var atPos = addr.indexOf('@',0);
if (atPos == -1) {
   if (db) alert('email address must contain an @');
   return false;
}
if (atPos == 0) {
   if (db) alert('email address must not start with @');
   return false;
}
if (addr.indexOf('@', atPos + 1) > - 1) {
   if (db) alert('email address must contain only one @');
   return false;
}
if (addr.indexOf('.', atPos) == -1) {
   if (db) alert('email address must contain a period in the domain name');
   return false;
}
if (addr.indexOf('@.',0) != -1) {
   if (db) alert('period must not immediately follow @ in email address');
   return false;
}
if (addr.indexOf('.@',0) != -1){
   if (db) alert('period must not immediately precede @ in email address');
   return false;
}
if (addr.indexOf('..',0) != -1) {
   if (db) alert('two periods must not be adjacent in email address');
   return false;
}

var ext_string=addr.substring(atPos);
var ext=ext_string.split('.');
//alert(ext);alert();
if(ext.length != unique(ext).length ){
	alert('repeated  primary domains in email address');
	return false;
}
for(var i=1;i<ext.length;i++){
	var suffix = ext[i];
	/*if(ext.indexOf(suffix)!= ext.lastIndexOf(suffix)){
	alert('repeated  primary domains in email address');
	return false;
	}*/
	if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
	if (db) alert('Invalid primary domain in email address');
	return false;
	}
}
// var suffix = addr.substring(addr.lastIndexOf('.')+1);
// if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
//    if (db) alert('invalid primary domain in email address');
//    return false;
// }
return true;
}

