/* validations */

var alphabets= /[a-zA-Z]/;
var nameFilter= /^[a-zA-Z\'\-\s]+$/;
var startNameFilter = /^[a-zA-Z]$/;
var nameGenFilter = /^[0-9a-zA-Z\-\s\'\!\@\#\$\%\^\&\*\(\)\-\_\+\?\.\:\;\[\]\/\,\"\=]+$/;
var passwordFilter = /^[0-9a-zA-Z\-\!\@\#\$\%\^\&\*\(\)\-\_\+\?\.\:\;\[\]\=]+$/;
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 specialCharsFilter = /^[\-\s\'\!\@\#\$\%\^\&\*\(\)\-\_\+\?\.\:\;\[\]\/\,\"\=]+$/;
var zipFilterInt = /^[0-9a-zA-Z\s]+$/;
var zipFilter = /^[0-9\s]+$/;

function checkBlank(inputVal,errorMsg,errorId,formObj,fieldName){
 if(inputVal.length == 0){
   return errorDisplay(errorId, errorMsg,formObj,fieldName);
 }
 return true;
}

function checkNumber(formObj,fieldName,fieldNameString,errorId){
 var inputVal = Trim(eval("formObj."+fieldName+".value"));
 if(!checkBlank(inputVal,"Invalid "+fieldNameString,errorId,formObj,fieldName)){
   return false;
 }
 if(!numberFilter.test(inputVal)){
   return errorDisplay(errorId, "Invalid "+fieldNameString,formObj,fieldName);
 }
 return true;
}

function checkZipcode(formObj,fieldName,fieldNameString,errorId){
 var inputVal = Trim(eval("formObj."+fieldName+".value"));
 if (!checkBlank(inputVal,"Invalid "+fieldNameString,errorId,formObj,fieldName)){
   return false;
 	}
 if (formObj.b_country.value == 'US') {
	if(!zipFilter.test(inputVal)){
   		return errorDisplay(errorId, "Invalid "+fieldNameString,formObj,fieldName);
	}
 } else {
	if (!zipFilterInt.test(inputVal)) {
   		return errorDisplay(errorId, "Invalid "+fieldNameString,formObj,fieldName);
	}
	
 }
 return true;
}

function checkValidPlan(fieldName,fieldNameString,errorId,formObj){
	var inputVal = Trim(document.getElementById(fieldName).value);
	if( inputVal == "--select--")
		return errorDisplay(errorId,fieldNameString,formObj,fieldName);
	else
		return true;
}

function checkPasswords(formObj,fieldName1,fieldName2,passMinLen,passMaxLen,errorId1,errorId2){
 var passwd1Val = eval("formObj."+fieldName1+".value");
 var passwd2Val = eval("formObj."+fieldName2+".value");
 if(!checkBlank(passwd1Val,"Пожалуйста, введите пароль.",errorId1,formObj,fieldName1)){
   return false;
 }
 if(!checkPasswordLength(passwd1Val,errorId1,passMinLen,passMaxLen,formObj,fieldName1)){
   return false;
 }
 if(!passwordFilter.test(passwd1Val)){
   return errorDisplay(errorId1,"В пароле заданы неверные символы.",formObj,fieldName1);
 }
 if(passwd1Val != passwd2Val){
   return errorDisplay(errorId2,"Пароли не совпадают.",formObj,fieldName2);
 }
 return true;
}
function checkPasswordLength(passwd1Val,errorId1,passMinLen,passMaxLen,formObj,fieldName1){
 if(passwd1Val.length < passMinLen){
 	return errorDisplay(errorId1,"Минимальная длина пароля - "+passMinLen+".",formObj,fieldName1);
 }
 if(passwd1Val.length > passMaxLen){
    return errorDisplay(errorId1,"Максимальная длина пароля - "+passMaxLen+".",formObj,fieldName1);
 }
 return true;
}
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 findUniqueChars(str){
 arrChars = str.split('');
 checkArr = unique(arrChars);
 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;
}
function errorDisplay(errorId,errorMsg,formObj,fieldName){
 errorSpan = eval("window.document.getElementById('"+errorId+"')");
 errorSpan.innerHTML = errorMsg;
 if (setFocus == false) {
	try {
 		eval("formObj."+fieldName+".focus()");
	 	setFocus = true;
	} catch (exc) {
		setFocus = false;
	}
 }
 return false;
}

function checkName(formObj,fieldName,fieldNameString,errorId){
 var inputVal = Trim(eval("formObj."+fieldName+".value"));
 if(!checkBlank(inputVal,"Please enter your "+fieldNameString+".",errorId,formObj,fieldName)){
   return false;
 }
 if(!regName(formObj,fieldName,fieldNameString,errorId)){
   return false;
 }
 if(findUniqueChars(inputVal).length <= 1){
   return errorDisplay(errorId,"The \""+fieldNameString+"\" you entered does not seem to be valid.",formObj,fieldName);
 }
 return true;
}

function checkLastName(formObj,fieldName,fieldNameString,errorId){
 var inputVal = Trim(eval("formObj."+fieldName+".value"));
 if(!checkBlank(inputVal,"Please enter your "+fieldNameString+".",errorId,formObj,fieldName)){
   return false;
 }
 if(!regName(formObj,fieldName,fieldNameString,errorId)){
   return false;
}
 return true;
}

function checkPhone(formObj,fieldName,fieldNameString,errorId){
 var inputVal = Trim(eval("formObj."+fieldName+".value"));
 if(!checkBlank(inputVal,"Please enter your "+fieldNameString+".",errorId,formObj,fieldName)){
   return false;
 }
 if(!phoneFilter.test(inputVal) || !startPhoneFilter.test(inputVal.charAt(0))){
   return errorDisplay(errorId,"Invalid \""+fieldNameString+"\".",formObj,fieldName);
 }
 if(findUniqueChars(inputVal).length <= 1 || inputVal.length < 10){
   return errorDisplay(errorId,"The \""+fieldNameString+"\" you entered does not seem to be valid.",formObj,fieldName);
 }
 return true;
}

function checkGenName(formObj,fieldName,fieldNameString,errorId){
 var inputVal = Trim(eval("formObj."+fieldName+".value"));
 if(!checkBlank(inputVal,"Please enter your "+fieldNameString+".",errorId,formObj,fieldName)){
   return false;
 }
 if(!regGenName(formObj,fieldName,fieldNameString,errorId)){
   return false;
 }
 if(numberFilter.test(inputVal) || specialCharsFilter.test(inputVal)){
   return errorDisplay(errorId,"Invalid \""+fieldNameString+"\".",formObj,fieldName);
 }
 return true;
}

function regGenName(formObj,fieldName,fieldNameString,errorId){
 var inputVal = Trim(eval("formObj."+fieldName+".value"));
 if(!nameGenFilter.test(inputVal)){
   return errorDisplay(errorId,"Invalid Characters in the field \""+fieldNameString+"\"",formObj,fieldName);
 }
 if(!startGenNameFilter.test(inputVal.charAt(0))){
   return errorDisplay(errorId,"The \""+fieldNameString+"\" you entered does not seem to be valid.",formObj,fieldName);
 }
 if(findUniqueChars(inputVal).length <= 1){
   return errorDisplay(errorId,"The \""+fieldNameString+"\" you entered does not seem to be valid.",formObj,fieldName);
 }
 return true;
}
// check for a valid name
function regName(formObj,fieldName,fieldNameString,errorId){
 var inputVal = Trim(eval("formObj."+fieldName+".value"));
 if(!nameFilter.test(inputVal)){
   return errorDisplay(errorId,"Invalid Characters in the field \""+fieldNameString+"\"",formObj,fieldName);
 }
 if(!startNameFilter.test(inputVal.charAt(0))){
   return errorDisplay(errorId,"The \""+fieldNameString+"\" you entered does not seem to be valid.",formObj,fieldName);
 }
 return true;
}
function checkEmail(formObj,fieldName,fieldNameString,errorId){
 var inputVal = Trim(eval("formObj."+fieldName+".value"));
 if(!checkBlank(inputVal,"Please enter your "+fieldNameString+".",errorId,formObj,fieldName)){
   return false;
 }
 if(!emailFilter.test(inputVal)){
   return errorDisplay(errorId,"Invalid "+fieldNameString,formObj,fieldName);
 }
 if(!validateEmail(inputVal,fieldNameString,errorId,true,true,formObj,fieldName)){
   return false;
 }
 return true;
}

function validateEmail(addr,fieldNameString,errorId,man,db,formObj,fieldName) {
if (addr == '' && man) {
   if (db) errorDisplay(errorId, "The \""+fieldNameString+"\" is mandatory.",formObj,fieldName);
   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) errorDisplay(errorId, "The \""+fieldNameString+"\" contains invalid characters",formObj,fieldName);
      return false;
   }
}
for (i=0; i<addr.length; i++) {
   if (addr.charCodeAt(i)>127) {
      if (db) errorDisplay(errorId, "The \""+fieldNameString+"\" contains non ascii characters.",formObj,fieldName);
      return false;
   }
}

var atPos = addr.indexOf('@',0);
if (atPos == -1) {
   if (db) errorDisplay(errorId, "The \""+fieldNameString+"\" must contain an @",formObj,fieldName);
   return false;
}
if (atPos == 0) {
   if (db) errorDisplay(errorId, "The \""+fieldNameString+"\" must not start with @",formObj,fieldName);
   return false;
}
if (addr.indexOf('@', atPos + 1) > - 1) {
   if (db) errorDisplay(errorId, "The \""+fieldNameString+"\" must contain only one @",formObj,fieldName);
   return false;
}
if (addr.indexOf('.', atPos) == -1) {
   if (db) errorDisplay(errorId, "The \""+fieldNameString+"\" must contain a period in the domain name",formObj,fieldName);
   return false;
}
if (addr.indexOf('@.',0) != -1) {
   if (db) errorDisplay(errorId, "In \""+fieldNameString+"\", period must not immediately follow @",formObj,fieldName);
   return false;
}
if (addr.indexOf('.@',0) != -1){
   if (db) errorDisplay(errorId, "In \""+fieldNameString+"\", period must not immediately precede @",formObj,fieldName);
   return false;
}
if (addr.indexOf('..',0) != -1) {
   if (db) errorDisplay(errorId, "In \""+fieldNameString+"\", two periods must not be adjacent",formObj,fieldName);
   return false;
}

var ext_string=addr.substring(atPos);
var ext=ext_string.split('.');
if(ext.length != unique(ext).length ){
	errorDisplay(errorId, "Repeated  primary domains in \""+fieldNameString+"\"",formObj,fieldName);
	return false;
}
for(var i=1;i<ext.length;i++){
	var suffix = ext[i];
	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) errorDisplay(errorId, "Invalid primary domain in the \""+fieldNameString+"\"",formObj,fieldName);
	return false;
	}
}
return true;
}
