/* --------------------------------------------------------------------------------------------- */
/*  SPECTRE.RU (C) 2004
/*	Notice: Some parts of these functions are taken from web site: 								 */
/*	http://www.breakingpar.com/bkp/home.nsf/Doc!OpenNavigator&87256B280015193F87256C0600540471 	 */
/* --------------------------------------------------------------------------------------------- */
function trim(inputString) {
   // Removes leading and trailing spaces from the passed string. Also removes
   // consecutive spaces and replaces it with one space. If something besides
   // a string is passed in (null, custom object, etc.) then return the input.
   if (typeof inputString != "string") { 
       if (inputString==null) inputString='';
       else inputString = ''+inputString; 
   }
   var retValue = inputString;
   var ch = retValue.substring(0, 1);
   while (ch == " ") { // Check for spaces at the beginning of the string
      retValue = retValue.substring(1, retValue.length);
      ch = retValue.substring(0, 1);
   }
   ch = retValue.substring(retValue.length-1, retValue.length);
   while (ch == " ") { // Check for spaces at the end of the string
      retValue = retValue.substring(0, retValue.length-1);
      ch = retValue.substring(retValue.length-1, retValue.length);
   }
   while (retValue.indexOf("  ") != -1) { // Note that there are two spaces in the string - look for multiple spaces within the string
      retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length); // Again, there are two spaces in each of the strings
   }
   if (retValue==null) return '';
   else return retValue;
}
function isValidNumber(inpString) { return /^[-+]?\d+(\.\,\d+)?$/.test(inpString); }
function isValidIPAddress(ipaddr) {
   var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
   if (re.test(ipaddr)) {
      var parts = ipaddr.split(".");
      if (parseInt(parseFloat(parts[0])) == 0) { return false; }
      for (var i=0; i<parts.length; i++) {
         if (parseInt(parseFloat(parts[i])) > 255) { return false; }
      }
      return true;
   } else {
      return false;
   }
}
function isValidEmail(emailAddress) {
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    return re.test(emailAddress);
}
function isValidTime(value) {
   var colonCount = 0;
   var hasMeridian = false;
   for (var i=0; i<value.length; i++) {
      var ch = value.substring(i, i+1);
      if ( (ch < '0') || (ch > '9') ) {
         if ( (ch != ':') && (ch != ' ') && (ch != 'a') && (ch != 'A') && (ch != 'p') && (ch != 'P') && (ch != 'm') && (ch != 'M')) {
            return false;
         }
      }
      if (ch == ':') { colonCount++; }
      if ( (ch == 'p') || (ch == 'P') || (ch == 'a') || (ch == 'A') ) { hasMeridian = true; }
   }
   if ( (colonCount < 1) || (colonCount > 2) ) { return false; }
   var hh = value.substring(0, value.indexOf(":"));
   if ( (parseFloat(hh) < 0) || (parseFloat(hh) > 23) ) { return false; }
   if (hasMeridian) {
      if ( (parseFloat(hh) < 1) || (parseFloat(hh) > 12) ) { return false; }
   }
   if (colonCount == 2) {
      var mm = value.substring(value.indexOf(":")+1, value.lastIndexOf(":"));
   } else {
      var mm = value.substring(value.indexOf(":")+1, value.length);
   }
   if ( (parseFloat(mm) < 0) || (parseFloat(mm) > 59) ) { return false; }
   if (colonCount == 2) {
      var ss = value.substring(value.lastIndexOf(":")+1, value.length);
   } else {
      var ss = "00";
   }
   if ( (parseFloat(ss) < 0) || (parseFloat(ss) > 59) ) { return false; }
   return true;
}
function isValidDate(dateStr) {
	var reg = /^\d{2}[\/\.\-]\d{2}[\/\.\-]\d{4}$/
	if (reg.test(dateStr) == false) { 
		var reg = /^\d{2}[\/\.\-]\d{2}[\/\.\-]\d{2}$/
		if (reg.test(dateStr) == false) return false;
	}
	var parts = dateStr.split("/");
	if (parts.length<3) parts = dateStr.split("-");
	if (parts.length<3) parts = dateStr.split(".");
	var dt = new Date(parseFloat(parts[2]), parseFloat(parts[1])-1, parseFloat(parts[0]), 0, 0, 0, 0);
	if (parseFloat(parts[0]) != dt.getDate()) { return false; }
	if (parseFloat(parts[1])-1 != dt.getMonth()) { return false; }
	return true;
} 
function validate_element(o, show_messages) {
	var t = trim(o.getAttribute('type')).toLowerCase(); 
	if (t=="button" || t=="radio" || t=="checkbox" || t=="submit") return true;
	var f = trim(o.getAttribute('format')).toLowerCase();
	var r = trim(o.getAttribute('required'));
	var n = trim(o.getAttribute('name'));
	var c = trim(o.getAttribute('caption')); if (!c) c=n;
	if ((f || r) && c) {
		var msg = o.getAttribute('msg');
		var mx = o.getAttribute('maxlen');
		var mn = o.getAttribute('minlen');
		var v = trim(o.value); l = v.length;
		if (r && !v) {
			if (show_messages) {
				if (msg) alert(msg); 
				else alert('Не заполнено поле "'+c+'"!');
			}
			return false;
		}
		if (!isNaN(mn)) {
			if (parseInt(mn)>l) {
				if (show_messages) {
					if (msg) alert(msg); 
					else alert('Введено слишком короткое значение в поле "'+c+'"!\n(Минимум '+mn+' символов, введено '+l+')');
				}
				return false;
			}
		}
		if (!isNaN(mx)) {
			if (parseInt(mx)<l) {
				if (show_messages) {
					if (msg) alert(msg); 
					else alert('Введено слишком длинное значение в поле "'+c+'"!\n(Максимум '+mx+' символов, введено '+l+')');
				}
				return false;
			}
		}
		if (f && v) {
			if (f=='email') {
				if (!isValidEmail(v)) {
					if (show_messages) {
						if (msg) alert(msg); 
						else alert('Введен неверный E-mail адрес в поле "'+c+'"!');
					}
					return false;
				}
			}
			if (f=='date') {
				if (!isValidDate(v)) {
					if (show_messages) {
						if (msg) alert(msg); 
						else alert('Введена неверная дата в поле "'+c+'"!');
					}
					return false;
				}
			}
			if (f=='time') {
				if (!isValidTime(v)) {
					if (show_messages) {
						if (msg) alert(msg); 
						else alert('Введено неверно время в поле "'+c+'"!');
					}
					return false;
				}
			}
			if (f=='ip') {
				if (!isValidIPAddress(v)) {
					if (show_messages) {
						if (msg) alert(msg); 
						else alert('Введен неверно IP адрес в поле "'+c+'"!');
					}
					return false;
				}
			}			
			if (f=='number') {
				if (!isValidNumber(v)) {
					if (show_messages) {
						if (msg) alert(msg); 
						else alert('Введено неверно числовое значение в поле "'+c+'"!');
					}
					return false;
				}
			}
		}
	}
	return true;
}
function validate_form(form_name, show_messages) {
	if (!document.getElementById) return; // well, we can't check this form, sorry...
	var os = document.forms[form_name].getElementsByTagName('input');
	for (var i = 0; i < os.length; i++)
		if (!validate_element(os[i], show_messages)) return false;
	var os = document.forms[form_name].getElementsByTagName('textarea');
	for (var i = 0; i < os.length; i++)
		if (!validate_element(os[i], show_messages)) return false;
	return true;
}
function validate_and_submit(form_name, show_messages) {
	if (validate_form(form_name, show_messages)) document.forms[form_name].submit();
}
