/**************************************************
	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]+$/;
var currencyFilter = /\$\d{1,3}(,\d{3})*\.\d{2}/;
// 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;
}
function isValidNumber(obj,message){
	
	alert(document.adminAdd.investment_amount.value);
	 val = obj.value;
	 cur  = /^-?\d{1,3}(,\d{3})*(\.\d{1,2})?$/;
	 anum=/(^-?\d+$)|(^-?\d+\.\d+$)/;
	 ret = false;

	 if(val.indexOf(",")>-1)
	 	ret = cur.test(val);
	 else
	 	ret = anum.test(val);

	 if(!ret){
	 	alert("Invalid number format");
	 	return false;
	 }
	 else
	 	return true;
 }
function checkCurrency(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!currencyFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 return true;
}

function checkPaidAmount(formName,fieldName,fieldNameString, errorMessage){
    var paidAmountFilter = /^[\d]{1,5}[.]?[\d]{0,2}$/;
    if(!checkBlank(formName,fieldName,fieldNameString)){
        return false;
    }
    var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
        if(!paidAmountFilter.test(inputVal)){
        return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\" "+ errorMessage);
    }
    return true;
}

function checkCreditCardNumber(formName,fieldNameType,fieldNameNumber) {
    var type = Trim(eval(doc+formName+"."+fieldNameType+".value"));
    var ccnum = Trim(eval(doc+formName+"."+fieldNameNumber+".value"));
    //inputVal = inputVal.replace(/[^\d]/g, '');
     var re;
     
    if (type == "Visa") {
      // Visa: length 16, prefix 4, dashes optional.
       re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "Master Card") {
      // Mastercard: length 16, prefix 51-55, dashes optional.
       re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "Discover") {
      // Discover: length 16, prefix 6011, dashes optional.
      re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "American Express") {
      // American Express: length 15, prefix 34 or 37.
      re = /^3[4,7]\d{13}$/;
   } else if (type == "Diners") {
      // Diners: length 14, prefix 30, 36, or 38.
      re = /^3[0,6,8]\d{12}$/;
   }

   if (!re.test(ccnum)) {alert("Not a valid " + type + " card");return false;}
   // Remove all dashes for the checksum checks to eliminate negative numbers
   ccnum = ccnum.split("-").join("");
   // Checksum ("Mod 10")
   // Add even digits in even length strings or odd digits in odd length strings.
   var checksum = 0;
   var i;
   for (i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
      checksum += parseInt(ccnum.charAt(i-1));
   }
   // Analyze odd digits in even length strings or even digits in odd length strings.
   for (i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
      var digit = parseInt(ccnum.charAt(i-1)) * 2;
      if (digit < 10) {checksum += digit;} else {checksum += (digit-9);}
   }
   if ((checksum % 10) == 0) return true;else  {alert("Please enter a valid credit card number");return false;}


}

function checkCreditCardExpDate(formName,fieldNameMonth,fieldNameYear) {
    var inputValMonth = Trim(eval(doc+formName+"."+fieldNameMonth+".value"));
    var inputValYear = Trim(eval(doc+formName+"."+fieldNameYear+".value"));

    var d = new Date();
    var currentYear = d.getFullYear();
    
    var currentMonth = d.getMonth();
    
    if (parseInt(inputValYear) == currentYear) {
        if (currentMonth > parseInt(inputValMonth)) {
            alert("Credit card has expired");
            return false;
        } else {
            return true;
        }
    } else {
            return true;
    }

   
}


