// List of allowed symbols for different field types
var digits      = "0-9";
var letters_low = "a-z";
var letters_up  = "A-Z";
var letters = letters_low + letters_up;
var simbols = digits + letters;
// List of banned simbols for different field types
var all_banned  = "\\!\\?\\.\\,\\;\\:\\/\\'\\\"\\@\\#\\$\\&\\^\\%\\~\\|\\+\\=\\(\\)\\[\\]\\{\\}\\<\\>\\_\\*\\-";
var banned      = '\\!\\?\\,\\;\\:\\/\"\\@\\#\\$\\&\\^\\%\\~\\|\\+\\=\\{\\}\\<\\>\\_\\*\\[\\]';
var aError = new Array();

function checkMaxValue(oField,sName,maxValue)
{
  var s = oField.value;
  var l = s.length;
  var max_length = 150;
  var sError = maxValue+" - max value form '" + sName + "'";
  if(s.length >maxValue)
  {
    error(oField, sError);
    return false;
  }
  return true;
}

function checkMinValue(oField, sName, minValue)
{
  var s = oField.value;
  var l = s.length;
  var max_length = 150;
  var sError = minValue + " - min value form '" + sName + "'";

  if( s.length < minValue)
  {
    error(oField, sError);
    return false;
  }
  return true;
}

function checkValueMoreThan(oField, sName, minValue)
{
  var s = oField.value;
  var l = s.length;
  var max_length = 150;
  var sError = "'" + sName + "' value must be bigger than " + minValue;
  if(s.length <= minValue)
  {
    error(oField, sError);
    return false;
  }
  return true;
}

function trim(st)
{
  var s = new String(st);
  while ((s.charAt(0)==' ')&&(s.length>1))
  {
    s=s.substring(1,s.length);
  }
  while ((s.charAt(s.length-1)==' ')&&(s.length>0))
  {
    s=s.substring(0,s.length-1);
  }
  return s;
}



// Check if value of target field is name (first name, last name, etc.)
//   max length is 150
function isName(oField, sName)
{
  var max_length = 150;

  return checkLength(max_length, oField, sName);
} 


// Check if value of target field is address
//   max length is 150
function isAddress(oField, sName)
{
  var max_length = 150;

  return checkLength(max_length, oField, sName);
} 


// Email address must be of form a@b.c ... in other words:
//   there must be at least one character before the "@"
//   there must be at least one character before the "."
//   there must be at least two character after the "."
//   the characters @ and . are both required
function isEmail(oField, sName)
{
  var s = oField.value;
  var l = s.length;
  var max_length = 150;
  var sError = "Field '" + sName + "': invalid e-mail address.";

  if (isEmpty(s)) return true;
  if (!checkLength(max_length, oField, sName)) return false;


  var tmp="^([-\\.a-z0-9_])+@(([-a-z0-9_]|-)+\\.)+[a-z]{2,5}$";
//window.alert(tmp);
//window.alert(value);
//  var re = /^([0-9]*)$/;
  var re = new RegExp(tmp, 'i');
  var result = re.test(s) ? true : false;
  if (!result)
  {
    error(oField, sError);
  }
  return result;
}


// Value of target field should be an integer number
function isInteger(oField, sName)
{
  if (checkAllowed(oField.value, digits))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' should be an integer number.");
    return false;
  }
}

function isWidth(oField, sName)
{
  if (checkAllowed(oField.value, digits))
  {
    if((oField.value<=800)&&(oField.value>=0))
    return true;
  }
  error(oField, "Field '" + sName + "' should be positive integer less 800.");
  return false;
}

function isHeight(oField, sName)
{
  if (checkAllowed(oField.value, digits))
  {
    if((oField.value<=600)&&(oField.value>=0))
    return true;
  }
  error(oField, "Field '" + sName + "' should be positive integer less 600.");
  return false;
}



// Value of target field should be an integer number
function isIntegerPositive(oField, sName)
{
  if (checkAllowed(oField.value, digits) && oField.value > 0)
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' should be a positive integer number.");
    return false;
  }
}

// Value of target field should be a string of latin characters
function isString(oField, sName)
{
  if (checkAllowed(oField.value, letters))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' should contain letter symbols only.");
    return false;
  }
}


// Check if value of target field is city name
//   max length is 150
//   letters of any language are allowed (digits and special simbols are banned)
function isCity(oField, sName)
{
  var max_length = 150;

//  if (!checkLength(max_length, oField, sName)) return false;

  if (checkNotAllowed(oField.value, banned + digits))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' is incorrect city name.");
    return false;
  }
}


// Check if value of target field is "russian" city name (could contain digits)
//   max length is 150
//   letters of any language and digits are allowed (only special simbols are banned)
function isCityRU(oField, sName)
{
  var max_length = 150;

  if (!checkLength(max_length, oField, sName)) return false;

  if (checkNotAllowed(oField.value, banned))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' is incorrect city name.");
    return false;
  }
}


// Check if value of target field is zip code (in free format)
//   max length is 10
//   latin letters and digits are allowed
function isZip(oField, sName)
{
  if (oField.value=='')
  {
    return true;
  }
  var max_length = 10;

  if (!checkLength(max_length, oField, sName)) return false;
  
  if (checkAllowed(oField.value, simbols))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' should contain letters and digits only.");
    return false;
  }
}


// Check if value of target field is USA zip code (in format XXXXX or XXXXX-XXXX, X - digit)
function isZipUS(oField, sName)
{
  var zipPattern1 = /^(\d{5})$/;
  var zipPattern2 = /^(\d{5})\-(\d{4})$/;
  var s = oField.value;

  if (isEmpty(s)) return true;

  if ((s.match(zipPattern1) == null) && (s.match(zipPattern2) == null))
  {
    error(oField, "Field '" + sName + "' should be in format XXXXX or XXXXX-XXXX.");
    return false;
  }

  return true;
}

// Check if value of target field is phone number (in free format)
//   max length is 7
//   max length is 50
//   latin letters and digits and "-.()+ " simbols are allowed
function isPhone(oField, sName)
{
  oField.value=trim(oField.value);
  if (oField.value=='')
  {
    return true;
  }
  var min_length = 7;
  var max_length = 50;

  if (!checkLength(max_length, oField, sName)) return false;
  if (!checkMinLength(min_length, oField, sName)) return false;
  
  if (checkAllowed(oField.value, simbols + "\\-\\.\\(\\)\\+\\ "))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' is incorrect phone number.");
    return false;
  }
}


// Check if value of target field is USA phone number (in format XXX-XXX-XXXX, X is digit)
function isPhoneUS(oField, sName)
{
  if (oField.value=='')
  {
    return true;
  }
  var phonePattern = /^(\d{3})\-(\d{3})\-(\d{4})$/;

  if (isEmpty(oField.value)) return true;
  if (oField.value.match(phonePattern) == null)
  {
    error(oField, "Field '" + sName + "' should be in format XXX-XXX-XXXX.");
    return false;
  }

  return true;
}


// Check if value of target field is "russian" phone number (couldn't contain letters)
//   max length is 7
//   max length is 50
//   digits and "-.()+ " simbols are allowed
function isPhoneRU(oField, sName)
{
  if (oField.value=='')
  {
    return true;
  }
  var min_length = 7;
  var max_length = 50;

  if (!checkLength(max_length, oField, sName)) return false;
  if (!checkMinLength(min_length, oField, sName)) return false;
  
  if (checkAllowed(oField.value, digits + "\\-\\.\\(\\)\\+\\ "))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' is incorrect phone number.");
    return false;
  }
}


// Check if value of target field is password
//   max length is 6
//   max length is 12
function isPassword(oField, sName)
{
  var min_length = 6;
  var max_length = 12;

  var reg = /\s+/i;
//  alert(reg.toString());  
//  alert(reg.test(oField.value));
  
  if (reg.test(oField.value))
  {
  	error(oField, "Field '" + sName + "' has wrong symbols (allowed symbols are letters and digits).");
  	return false;
  }
  if (!checkLength(max_length, oField, sName)) return false;
  if (!checkMinLength(min_length, oField, sName)) return false;

  return true;
}


// Check if value of target field is credit card number
//   max length is 16
//   max length is 18
//   only digits are allowed
function isCreditCardNumber(oField, sName)
{
  var min_length = 16;
  var max_length = 18;

  if (!checkLength(max_length, oField, sName)) return false;
  if (!checkMinLength(min_length, oField, sName)) return false;
  
  if (checkAllowed(oField.value, digits))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' should contain digits only.");
    return false;
  }
}


// Check if value of target field is credit card cvv
//   max length is 3
//   max length is 4
//   only digits are allowed
function isCreditCardCVV(oField, sName)
{
  var min_length = 3;
  var max_length = 4;

  if (!checkLength(max_length, oField, sName)) return false;
  if (!checkMinLength(min_length, oField, sName)) return false;
  
  if (checkAllowed(oField.value, digits))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' should contain digits only.");
    return false;
  }
}


// Check if value of target field is flat number
//   max length is 5
//   letters and digits are allowed
function isFlat(oField, sName)
{
  var max_length = 5;

  if (isEmpty(oField.value)) return true;
  if (!checkLength(max_length, oField, sName)) return false;
  
  if (checkNotAllowed(oField.value, all_banned))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' should contain digits only.");
    return false;
  }
}


// Check if value of target field is building number
//   max length is 3
//   letters and digits are allowed
function isBuilding(oField, sName)
{
  var max_length = 3;
  var s = new String(oField.value);

  if (isEmpty(s)) return true;
  if (!checkLength(max_length, oField, sName)) return false;
  
  if (checkNotAllowed(s, all_banned))
  {
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' should contain letters and digits only.");
    return false;
  }
}


// Returns true if the string passed in is a valid money
//   only digits and "." are allowed
//   rounds to two digits after decimal dot
function isMoney(oField, sName)
{
  var max_length = 10;
  var s = oField.value;

  if (isEmpty(s)) return true;
  if (!checkLength(max_length, oField, sName)) return false;

  if (checkAllowed(s, digits + "\\."))
  {
    oField.value = Math.round(parseFloat(s)*100)/100;
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' is incorrect money amount.");
    return false;
  }
}


// Check if value of target field is float number
//   only digits and "." are allowed
//   no accuracy limitations
function isFloat(oField, sName)
{
  var s = oField.value;

  if (isEmpty(s)) return true;
  if (checkAllowed(s, digits + "\\."))
  {
    oField.value = parseFloat(s);
    return true;
  }
  else
  {
    error(oField, "Field '" + sName + "' is incorrect float number.");
    return false;
  }
}


// Check if value of target field is URL
//   function automatically cuts 'http://' & 'https://' value 
//   max length is 4
//   max length is 100
//   only digits and "." simbol are allowed
//   value should contain "." simbol, but not in first or last position
function isURL(oField, sName)
{
  var s = oField.value;
  if (isEmpty(s)) return true;

  var min_length = 4;
  var max_length = 255;
  var sError = "Field '" + sName + "' is incorrect URL.";
  
  s=s.replace(/^.*?:\/\//gi, '');
  
  oField.value = s;
  if (!checkLength(max_length, oField, sName)) return false;
  if (!checkMinLength(min_length, oField, sName)) return false;
  if (oField.value.indexOf('.',0) == -1)
  {
    error(oField, sError);
  	return false;
  }

//  if (checkAllowed(oField.value, simbols + "\\-\\.\\/\\&\\?\\_"))
  if (checkAllowed(oField.value, simbols + "\\-\\+\\.\\:\\;\\/\\&\\?\\=\\[\\]\\{\\}\\_\\#"))
  {
    var temp;
    var tmp="^[^\\.].*?[^\\.]$";
    var re = new RegExp(tmp);
    var result = re.test(s) ? true : false;
    if(!result)
    {
    	error(oField, sError);
    }
    return result;
  }
  else
  {
   	error(oField, sError);
	  return false;
  }
}


// Check if value of target field is URL
//   function automatically add 'http://' 
//   min length is 4
//   max length is 100
//   only digits and "." simbol are allowed
//   value should contain "." simbol, but not in first or last position
function isURLProtocol(oField, sName)
{
  var s = oField.value;
  if (isEmpty(s)) return true;
  
  var min_length = 4;
  var max_length = 255;
  var sError = "Field '" + sName + "' is incorrect URL.";

//  r = new RegExp('(?:(.*)(:\/\/))?(.*)', 'gi');
  r = new RegExp('^(?:(.*?)(:\/\/))?(.*)', 'gi');
  
  s_ar = r.exec(s);

  oField.value = s_ar[3];
  if (!checkLength(max_length, oField, sName)) return false;
  if (!checkMinLength(min_length, oField, sName)) return false;
  if (oField.value.indexOf('.',0)==-1)
  {
    error(oField, sError);
	  return false;
  }

//  if (checkAllowed(oField.value, simbols + "\\-\\.\\/\\&\\?\\_"))
//  if (checkAllowed(oField.value, simbols + "\\-\\.\\/\\&\\?\\=\\[\\]\\_\\:"))
  if (checkAllowed(oField.value, simbols + "\\-\\+\\.\\:\\;\\/\\&\\?\\=\\[\\]\\{\\}\\_\\#"))
  {
    var temp;
    var tmp="^[^\\.].*?[^\\.]$";
    var re = new RegExp(tmp);
    var result = re.test(s) ? true : false;
    if(!result)
    {
	    error(oField, sError);
    }
    else
    {
    	if (s_ar[1] == 'http' || s_ar[1] == 'https')
    	{
	    	oField.value = s_ar[1] + '://' + s_ar[3];
    	}
    	else
    	{
    		oField.value = 'http://' + s_ar[3];
    	}
    }
    return result;
  }
  else
  {
   	error(oField, sError);
	  return false;
  }
}


// Check if value of target field is IP address
//   required format is N.N.N.N, N is number from 0 to 255
//   IP Addresses 0.0.0.0 and 255.255.255.255 are banned
function isIP(oField, sName) 
{
  var s = oField.value;
  var sError = "Field '" + sName + "' is incorrect IP address.";
  
  var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;

  if (isEmpty(s)) return true;

  if ((s == "0.0.0.0") || (s == "255.255.255.255"))
  {
    error(oField, sError);
    return false;
  }

  var ipArray = s.match(ipPattern);
  if (ipArray == null)
  {
    error(oField, sError);
    return false;
  }
  else
  {
    for (i = 1; i <= 4; i++)
    {
      if (ipArray[i] > 255)
      {
        error(oField, sError);
        return false;
      }
    }
  }

  return true;
}


// Check if value of target field is SSN - Social Security Number (in format XXX-XX-XXXX or XX-XXXXXXX, X is digit)
function isSSN(oField, sName)
{
  var ssnPattern1 = /^(\d{3})\-(\d{2})\-(\d{4})$/;
  var ssnPattern2 = /^(\d{2})\-(\d{7})$/;
  var s = oField.value;

  if (isEmpty(s)) return true;

  if ((s.match(ssnPattern1) == null) && (s.match(ssnPattern2) == null))
  {
    error(oField, "Field '" + sName + "' should be in format XXX-XX-XXXX or XX-XXXXXXX.");
    return false;
  }

  return true;
}


// Check if value of target field is house number
//   digits and letters are allowed
//   one letter (in any language) is optional and could be only on last position
function isHouse(oField, sName)
{
  var housePattern = /^(\d{1,4})(\S{0,1})$/;

  if (isEmpty(oField.value)) return true;

  if (!checkNotAllowed(oField.value, all_banned))
  {
    error(oField, "Field '" + sName + "' should contain digits and letters only.");
    return false;
  }
  else if ((oField.value.match(housePattern) == null))
  {
    error(oField, "Field '" + sName + "': incorrect value.");
    return false;
  }

  return true;
}

function checkDateFromTo(oField1, sName1,oField2, sName2)
{
  if((isDate(oField1, sName1))&&isDate((oField2, sName2)))
  {
    var s1 = new String(oField1.value);
    var s2 = new String(oField2.value);
    var sError = "'" + sName2 + "' date should be later than '" + sName1 + "' date.";
    var aDate1 = s1.split("/");
    var aDate2 = s2.split("/");
    dateName1=new Date(aDate1[2],aDate1[0]-1,aDate1[1]);
    dateName2=new Date(aDate2[2],aDate2[0]-1,aDate2[1]);
    if (dateName2>=dateName1)
    {
      return true;
    }
    error(oField1,sError);
    return false;
  }
  return true;
}

// Check if value of target field is a valid date (in USA format: MM/DD/YYYY)
function isDate(oField, sName)
{   
  var s = new String(oField.value);
  var len = s.length;
  var sError = "Field '" + sName + "' should be in MM/DD/YYYY format.";

  if (isEmpty(oField.value)) return true;
  var aDate = s.split("/");
  if (checkAllowed(s, digits + "\\/") && (aDate.length == 3))
  {
    dateName=new Date(aDate[2],aDate[0]-1,aDate[1]);
    cDay = dateName.getDate();
    cMonth = dateName.getMonth()+1;
    cYear = dateName.getYear();
    if (cYear < 1900)
    {
    	cYear += 1900;
    }
    if (cYear < 100)
    {
      cYear = '19' + cYear;
    }
    if((aDate[1] != cDay) || (aDate[0] != cMonth) || (aDate[2] != cYear))
    {
      error(oField, sError);
      return false;
    }
  }
  else
  {
    error(oField, sError);
    return false;
  }

  return true;
}


function isInPast(oField, sName)
{
  var sError = "Date in the '" + sName + "' field can't be future date.";
  var today = new Date();
  if (!isDate(oField, sName))
  {
    return false;
  }
  var s = new String(oField.value);
  var aDate = s.split("/");
  var setday = new Date(aDate[2],aDate[0]-1,aDate[1]);
  
//  alert(setday.getTime() + ' > ' + today.getTime() + '/n' + setday + ' > ' + today);
  
  if (setday.getTime() > today.getTime())
  {
    error(oField, sError);
    return false;
  }
  else
  {
    return true;
  }
}


// Check if value of target field is a valid date (in Europian format: DD.MM.YYYY)
function isDateRU(oField, sName)
{   
  var s = new String(oField.value);
  var len = s.length;
  var sError = "Field '" + sName + "' should be in DD.MM.YYYY format.";

  if (isEmpty(oField.value)) return true;

  var aDate = s.split(".");
  if (checkAllowed(s, digits + "\\.") && (aDate.length == 3))
  {
  dateName=new Date(aDate[2],aDate[1]-1,aDate[0]);
  if((aDate[0]!=dateName.getDate())||(aDate[1]!=dateName.getMonth()+1)||(aDate[2]!=dateName.getYear()))
    {
      error(oField, sError);
      return false;
    }
  }
  else
  {
    error(oField, sError);
    return false;
  }

  return true;
}


// Check if value of target field is a valid time (in Europian format: HH:MM, HH from 0 to 23 and MM from 0 to 59)
function isTime(oField, sName)
{   
  var s = new String(oField.value);
  var len = s.length;
  var sError = "Field '" + sName + "' should be in HH:MM format.";

  if (isEmpty(oField.value)) return true;

  var aTime = s.split(":");

  if (checkAllowed(s, digits + "\\:") && (aTime.length == 2))
  {
  dateName=new Date(0,0,0,aTime[0],aTime[1]);
  if((aTime[0]!=dateName.getHours())||(aTime[1]!=dateName.getMinutes()))
    {
      error(oField, sError);
      return false;
    }
  if(aTime[1].lenght==1)
    {
    aTime[1] = '0'+aTime[1];
    }
    s=aTime[0]+':'+aTime[1];
    oField.value=s;
  }
  else
  {
    error(oField, sError);
    return false;
  }

  return true;
}


/* ##Internal Functions## */

// Check if target value contains simbols only from list sValid
//   return false if value contains any additional simbols
function checkAllowed(value, sValid)
{
  if(value=='') return true;
  var temp;
  var s = value;
//  var re = '/^(['+sValid+']*)$/';
  var tmp="^(["+sValid+"]+)$";
//window.alert(tmp);
//window.alert(value);
//  var re = /^([0-9]*)$/;
  var re = new RegExp(tmp);
  var result = re.test(s) ? true : false;
  return result;

/*  for (var i = 0; i < value.length; i++)
  {
    temp = value.substring(i, i + 1);
    if (sValid.indexOf(value.substring(i, i + 1)) == "-1")
    {
      return false;
    }
  }

  return true;*/
}


// Check if target value doesn't contains simbols from sInvalid list
//   return false if value contains simbol from sInvalid list
function checkNotAllowed(value, sInvalid)
{
  if(value=='') return true;
  var temp;
  var s = value;
//  var re = '/^(['+sValid+']*)$/';
  var tmp="^([^"+sInvalid+"]*)$";
//window.alert(tmp);
//window.alert(value);
//  var re = /^([0-9]*)$/;
  var re = new RegExp(tmp);
  var result = re.test(s) ? true : false;
  return result;
/*  var temp;

  for (var i = 0; i < value.length; i++)
  {
    temp = value.substring(i, i + 1);
    if (sInvalid.indexOf(temp) > -1)
    {
      return false;
    }
  }

  return true;*/
}


// Check if target value length less then target maximum
//  if value length more then maximum - show error message and return false
function checkLength(maximum, oField, sName)
{
  if (isEmpty(oField.value)) return true;

  if (oField.value.length > maximum)
  {
    error(oField, "Field '" + sName + "' has " + oField.value.length + " symbols (maximum allowed length is " + maximum + ").");
    return false;
  }
  else
  {
    return true;
  }
}


// Check if target value length more then target minimum
//  if value length less then minimum - show error message and return false
function checkMinLength(minimum, oField, sName)
{
  if (isEmpty(oField.value)) return true;

  if (oField.value.length < minimum)
  {
    error(oField, "Field '" + sName + "' has " + oField.value.length + " symbols (minimum required length is " + minimum + ').\n');
    return false;
  }
  else
  {
    return true;
  }
}


// Show error message and return focus to target field
function error(oField, sError)
{
  aError.push(sError);
}


// Check whether string s is empty.
function isEmpty(s)
{
  return ((s == null) || (s.length == 0));
}


function checkMandatory(oField, sName)
{
  try
  {
    oField.value=trim(oField.value);
  }
  catch (e)
  {}

  if (oField.value.length)
  {
    return true;
  }
  else
  {
    error(oField, "Mandatory field '" + sName + "' is empty.");
    return false;
  }
}

function checkInterval(oPass1, oPass2)
{
  if (isEmpty(oPass2.value) || isEmpty(oPass2.value))
  {
    return true;
  }

  if (parseFloat(oPass1.value) > parseFloat(oPass2.value))
  {
    error(oPass2, "Incorrect Interval");
    return false;
  }

  return true;
}

function checkSubmit(sForm, aMandatory, aValid, aExt)
{

  aError = Array();
  sError = "Form corrupted";
  sForm = 'document.' + sForm + '.';
  var oFocusField;

// Check Mandatory Fields
  for (var i in aMandatory)
  {
    try
    {
        oField = eval(sForm + i);
        if (!checkMandatory(oField, aMandatory[i]))
        {
            if (!oFocusField)
            {
                oFocusField = oField;
            }
        }
    }
    catch(er)
    {
        alert(sError);
        return false;
    }
  }

// Check Field Validation
  for (var i in aValid)
  {
   try
    {
	    if (!eval(aValid[i][1] + '(' + sForm + i + ', "' + aValid[i][0] + '")'))
      {
        oFocusField = eval(sForm + i);
      }
    }
    catch(er)
    {
        alert(sError);
        return false;
    }
  }


  if (aError.length == 0)
  {
    // Additional Checks
    for (i = 0; i < aExt.length; i++)
    {
      try
      {
         !eval(aExt[i]);
      }
      catch(er)
      {
        alert(sError);
        return false;
      }
    }
  }


// Check Result
  if (aError.length)
  {
    var s = 'There are following problem(s) in form:\n\n';
    for (i = 0; i < aError.length; i++)
    {
      s += aError[i] + '\n';
    }

    alert(s);
    try
    {
      if (oFocusField.type != 'hidden')
      {
//      For Mozilla
        window.field = oFocusField;
        setTimeout('window.field.focus();', 1);
      }
    }
    catch(er)
    {
      return false;
    }
    return false;
  }
  else
  {
    return true;
  }
}

function checkInterval(oField1, oField2, sName)
{
  if (isEmpty(oField1.value) || isEmpty(oField2.value))
  {
    return true;
  }

  if (parseFloat(oField1.value) > parseFloat(oField2.value))
  {
    error(oField1, "Fields '" + sName + "': incorrect range.");
    return false;
  }

  return true;
}

function isSame(src1,src2,str)
{
    if (src1.value!=src2.value)
    {
        alert(str);
        src1.focus();
        return false;
    }
    else
    {
        return true;
    }
}

// Check equality value of target fields

function checkEquality(oField1,sName1, oField2,sName2)
{
  if(oField1.value!=oField2.value)
  {
      error(oField1,"Fields '" + sName1 + "' and '" + sName2 + "' are different.");
      return false;
  }
  else
  {
    return true;
  }
}

