function PhoneTest(FormObj, bTestForEmpty)
{
	if(!isNotEmpty(FormObj.value)) 
	{
		// Проверка на пустое значение, если bTestForEmpty == 1 => допустимы пустые значения
		if(bTestForEmpty != '1') return true;
		ErrorMsg(FormObj, "Не заполнено поле 'Телефон'");
		return false;
	}
	if(!isPhoneNum(FormObj.value)) 
	{
		ErrorMsg(FormObj, "В поле 'Телефон' могу находиться только цифры и символы '(',')','-'.");
		return false;
	}
	var sTemStr = MakeNum(FormObj.value);
	if(!isNum(FormObj.value)) 
	{
		ErrorMsg(FormObj, "Неправильно заполнено поле 'Телефон'");
		return false;
	}
	else
		if(sTemStr.length < 5)
		{
			ErrorMsg(FormObj, "Длина номера телефона должна быть не менее 5 цифр");
			return false;
		}
	return true;
}

function PhoneTestEng(FormObj)
{
	if(!isNotEmpty(FormObj.value)) 
	{
		ErrorMsg(FormObj, "Field 'Phone' not filled");
		return false;
	}
	if(!isPhoneNum(FormObj.value)) 
	{
		ErrorMsg(FormObj, "In field 'Phone' valid only digits and symbols '(',')','-'.");
		return false;
	}
	var sTemStr = MakeNum(FormObj.value);
	if(!isNum(FormObj.value)) 
	{
		ErrorMsg(FormObj, "Field 'Phone' not correctly filled");
		return false;
	}
	else
		if(sTemStr.length < 5)
		{
			ErrorMsg(FormObj, "Phone number length must be more than 5 digits");
			return false;
		}
	return true;
}

function ErrorMsg(FormObj,Text){
   alert(Text);
   FormObj.focus();
}

function StripNum(Val)   {
   //  Remove decorations (commas, dollar signs) from number
   var RefString = "-.0123456789", TempChar, OutString = "";
   Val = "" + Val; // Make sure Val is character string
   // Only keep chars in Val that are valid numeric chars (i.e. in "RefString")
   if(Val.length == 0) return ("");
   for (var i=0; i<Val.length; i++){
      TempChar=Val.substring(i, i+1);
      if (RefString.indexOf (TempChar, 0) != -1) OutString=OutString+TempChar; // TempChar is valid number
   }
   return (OutString);
}

function isPasswordFormat(Val)   {
   //  Remove decorations (commas, dollar signs) from number
   var RefString = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
   var TempChar;
   if(Val.length == 0) return false;
   for (var i=0; i<Val.length; i++){
      TempChar=Val.substring(i, i+1);
      if (RefString.indexOf (TempChar, 0) == -1) return false; 
   }
   return true;
}

// Оставляет в строке только цифры
function MakeNum(Val)
{
   var RefString = "0123456789", TempChar, OutString = "";
   Val = "" + Val; // Make sure Val is character string
   // Only keep chars in Val that are valid numeric chars (i.e. in "RefString")
   if(Val.length == 0) return ("");
   for (var i=0; i<Val.length; i++){
      TempChar=Val.substring(i, i+1);
      if (RefString.indexOf (TempChar, 0) != -1) OutString=OutString+TempChar; // TempChar is valid number
   }
   return (OutString);
}

function isPhoneNum(phone)
{
   var RefString = "-()0123456789,;", TempChar, phone;
   phone = "" + phone; // Make sure Val is character string
   // Only keep chars in Val that are valid numeric chars (i.e. in "RefString")
   if(phone.length == 0) return false;
   for (var i=0; i< phone.length; i++){
      TempChar=phone.substring(i, i+1);
      if (RefString.indexOf (TempChar, 0) == -1) return false; // TempChar is valid number
   }
   return true;
}

function CommaFormat(Num) {
   // Add commas to large numbers
   var Result,IX,Trailer
   Result = "";
   Num=Num.toString()
   IX=Num.indexOf('.',0);
   if (IX<0) {
	  IX=Num.length
	 } else {
		Num=Num+"00"	
	 }	
   if ((Num.length-IX)>3) Num=Num.substring(0,IX+3) // only 2 decimal places past .
   if (IX<=4) return Num; // too short for commas
   Result=Num.substring(IX,Num.length)
   Num=Num.substring(0,IX)
   while (Num.length > 3) {
      Result = "," + Num.substring(Num.length-3,Num.length)+ Result;
      Num = Num.substring(0,Num.length-3)
   }
   Result = Num + Result;
   return Result;
}

function isDate(Value) {
   // return false if Value is not a valid date
   var IX=Value.indexOf('/',0);
   if (-1==IX) return false;
   var MM=1*Value.substring(0,IX);
   Value=Value.substring(IX+1);
   IX=Value.indexOf('/',0);
   if (-1==IX) return false;
   var DD=1*Value.substring(0,IX);
   var YY=1*Value.substring(IX+1);
   if (isNaN(DD)) return false;
   if (isNaN(MM)) return false;
   if (isNaN(YY)) return false;
   if ((MM<1)||(MM>12)) return false;
   if ((DD<1)||(DD>32)) return false;
   if (YY<0) return false;
   var Ndays=28;
   if (0==YY%4) Ndays=29;
   if ((MM==2)&&(DD>Ndays)) return false
   if (((MM==6)||(MM==9)||(MM==11))&&(DD>30)) return false;
   return true // must be ok
}
function isNum(cNum) {
   cNum=parseFloat(StripNum(cNum))
  return (!isNaN(cNum));
}
function isNumFormat(FormObj)  {
   // Return false if Field isn't in numeric Format or empty"
   // Also reformat to x,xxx.xx format
   var Val=StripNum(FormObj.value);
   FormObj.value=Val;
   if (Val.length==0) return(true);
   Val=parseFloat(Val);
   if (isNaN(Val)) {
      ErrorMsg(FormObj,'Please enter a valid number');
      return(false);
   }
   FormObj.value=CommaFormat(Val);
   return true;
}

function isNumRange(FormObj,Low,High) {
   // Return false if Field isn't in integer Format or empty and within range
   // Also reformat to x,xxx format
   var Val=StripNum(FormObj.value);
   FormObj.value=Val;
   if (Val.length==0) return(true);
   Val=parseFloat(Val);
   if (isNaN(Val)) {
      ErrorMsg(FormObj,'Please enter a valid number');
    return(false);
   }
   if ((Val<Low) || (High<Val)) {
      ErrorMsg(FormObj,'Please enter a whole number between '+Low+' and '+High);
      return(false);
   }
   FormObj.value=CommaFormat(Val);
   return true;
}

// Возвращает false если FormObj.value пустое или состоит из пробелов
function isNotEmpty(String) {
  if (String.length == 0) {return (false);}
  for (var i=0; i < String.length; i++) {
    if (String.substring(i) != " ") {return (true);}
  }
  return (false);
}

function isPhoneFormat (FormObj)  {
   // Return false if field isn't in Phone Format (10 digit) or empty"
   // Also reformat phone to xxx-xxx-xxxx format
  var i,Tmp,String,NewString;
  String=FormObj.value;
  if (String.length == 0) {return (true);}
  NewString="";
  var NumChars = 0;
  var OKchars = '0123456789'
  for (var i=0; i < String.length; i++)  {
    Tmp = String.substring (i, i+1);
    if (OKchars.indexOf (Tmp, 0) > -1) {
       NewString=NewString+Tmp;
       NumChars=NumChars+1;
    }
  }
  if (0==NumChars) {return (true);}
  
  if (10<=NumChars) { // ok reformat
     String=""
     if ('1'==NewString.substring(0,1)) {
			String="1-"
			NewString=NewString.substring(1,NewString.length)			
		 }
     String+=NewString.substring(0,3)+"-";
     String+=NewString.substring(3,6)+"-";
     String+=NewString.substring(6,10)+" ";
     String+=NewString.substring(10,NewString.length);
     FormObj.value=String;
     return (true);
  }
  return (false);
}

function isEmailFormat(sEmail) {
   // Return true if this is probably an email address or empty
  // Valid email string must have a @ followed by a period
  if (false==isNotEmpty(sEmail)) return true; // Empty email ok
  var Loc1= sEmail.indexOf("@");
    var Loc2= sEmail.lastIndexOf(".");
  if (Loc1 == -1) return false; // must have an @ imbedded in string
  if (Loc2<Loc1) return false; // must have an . after the @
  if (2>(sEmail.length-Loc2)) return false; // more than 2 characters after .
return true;
}
// определяет есть - ли русские символы в строке
function isRussian(String)
{
  for (var i=0; i<String.length; ++i) {
       if (String.charCodeAt(i) > 127) return true;
  }
  return false;
}
function isLength(String,Len) {
   // return false if String has fewer than "Len" non-blank characters
  if (String.length == 0) return false;
  var count = 0;
  for (var i=0; i<String.length; ++i) {
       var ch = String.charAt(i);
       if (ch != ' ' & ch != '\t') count++;
  }
  if (count>=Len )return true;
  return false;
}

function isMoneyFormat (FormObj)  {
   // Return false if Field isn't in Money Format or empty"
   // Also reformat to $xxx.xx format
   var Val=StripNum(FormObj.value)
   FormObj.value=Val;
   if (Val.length==0) return(true);
   Val=parseFloat(Val)
   if (isNaN(Val)) {
      ErrorMsg(FormObj,'Please enter a valid dollar amount.');
    return(false);
   }
  FormObj.value="$"+CommaFormat(roundto(.01,Val))
   return true;
}

function isPct(FormObj) {
   // Return false if field isn't a percentage or empty"
   // Also reformat to xx% format
   var Value, NumVal
   Value=StripNum(FormObj.value)
   FormObj.value=Value
   if (Value.length==0) return(true);
   FormObj.value=Value + "%"
   NumVal=parseFloat(Value)
  if(isNaN(NumVal)) {
      ErrorMsg(FormObj,'Please enter a valid valid percentage');
     return(false);
  }
   if ((0<=NumVal) && (NumVal<=100)) return(true);
   ErrorMsg(FormObj,"Please enter a number between 0 and 100");
   return(false);
}

function isYear(FormObj) {
   // Return false if field isn't a valid year"
   var Value
   Value=StripNum(FormObj.value)
   if (Value.length==0) return(true);
   NumVal=parseFloat(Value)
  if(isNaN(NumVal)) {
     ErrorMsg(FormObj,"Please enter a valid year");
     return(false);
  }
  if ((0<=NumVal)&&(NumVal<50)) NumVal=2000+NumVal;
  if ((50<NumVal)&&(NumVal<100)) NumVal=1900+NumVal;
  FormObj.value=NumVal
  if ((1900<=NumVal) && (NumVal<=2050)) return(true);
   ErrorMsg(FormObj,"Please enter a year between 1900 and 2050");
  return(false);

}

function roundto(Factor,Num)   {
   // Round "Num" to nearest "Factor"
   /*    Ex: roundto (100, 2532)      --> 2500    (for nearest 100)
         roundto (1, 252.4284)    --> 252     (for nearest whole number)
         roundto (.01, 252.4284)  --> 252.43  (for dollars & cents)
         roundto (.125, 252.4284) --> 252.375 (for nearest 1/8th of a point)
   */
   if (Factor == 0) return (0); // No can do if factor is zero -- just return zero
   Num = Factor * (Math.floor(.5 + (Num/Factor)));
   return(Num);
}

