var strUserAgent = navigator.userAgent.toLowerCase();
var isIE = strUserAgent.indexOf("msie") > -1;
var isNS6 = strUserAgent.indexOf("netscape6") > -1;
var isNS4 = !isIE && !isNS6  && parseFloat(navigator.appVersion) < 5;

//regular expressions
var reValidIntChars = /\d/;
var reValidIntString = /^\d*$/;

var reValidIDChars = /\w/;
var reValidIDString = /^[^\d]\w*$/;

var reValidRealChars = /[\d\.]/;
var reValidRealString = /^\d*\.{0,1}\d*$/;

var reValidURLChars = /[\w\/,]/;
var reValidURLString1 = /^\/(\w+\/){0,}(\w)*(,\/(\w+\/){0,}\w*){0,}(,){0,}$/;
var reValidURLString2 = /^\/(\w+\/){0,}(\w)*(,\/(\w+\/){0,}\w*){0,}(,\/){0,}$/;
var reValidURLString3 = /^\/(\w+\/){0,}(\w)*(,\/(\w+\/){0,}\w*){0,}$/;

var reKeyboardChars = /[\x00\x03\x08\x09\x0D\x16\x18\x1A]/;
var reClipboardChars = /[cvxz]/i;

function checkClipboardCode(oEvent, strKey) {
	if (isNS6)
		return	oEvent.ctrlKey && reClipboardChars.test(strKey);
	else
       		return false;
}

function checkClipboardCode(oEvent, strKey) {
	if (isNS6)
		return oEvent.ctrlKey && reClipboardChars.test(strKey);
	else
		return false;
}

function isValid(strValue, masktype) {
	var reRE;

	switch(masktype){
		case 'int' : reRE = reValidIntString; break;
		case 'id'  : reRE = reValidIDString; break;
		case 'real' : reRE = reValidRealString; break;
	}
	if(masktype == 'text'){
		return 1;
	} else if (masktype == 'urlpart') {

		return	reValidURLString3.test(strValue) ||
			reValidURLString2.test(strValue) ||
			reValidURLString1.test(strValue) ||
			strValue.length == 0;
	} else {
		return reRE.test(strValue) || strValue.length == 0;
	}

}

function selected_in() {
	if(isIE){
		var t = document.selection.createRange().text;
		if(t.length > 0){
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

//mask functions
function maskKeyPress(oEvent, masktype, maxlen) {
	var iKeyCode, strKey, oInput;
	var reRE;

	if (isIE) {
		iKeyCode = oEvent.keyCode;
		oInput = oEvent.srcElement;
	} else {
		iKeyCode = oEvent.which;
		oInput = oEvent.target;
	}

	strKey = String.fromCharCode(iKeyCode);

	if(reKeyboardChars.test(strKey)){
		return true;
	}

	switch(masktype){
		case 'int'  : reRE = reValidIntChars;	break;
		case 'id'   : reRE = reValidIDChars; 	break;
		case 'real' : reRE = reValidRealChars;	break;
		case 'urlpart' : reRE = reValidURLChars;	break;
	}

	if (isValid(oInput.value, masktype)) {
		oInput.validValue = oInput.value;
		if ((reRE && !reRE.test(strKey) && !checkClipboardCode(oEvent, strKey)) || (maxlen && oInput.value.length >= maxlen && !selected_in())){
			return false;
		}
	} else {
		alert("Неверные входные данные");
		oInput.value = oInput.validValue;
		return false;
	}
	return true;
}

function maskChange(oEvent, masktype, maxlen) {
	var oInput;

	if (isIE) {
		oInput = oEvent.srcElement;
	} else {
		oInput = oEvent.target;
	}

	if (!isValid(oInput.value, masktype)) {
		alert("Неверные входные данные");
		oInput.value = oInput.validValue || "";
		oInput.focus();
		oInput.select();
	} else {
		oInput.validValue = oInput.value;
	}
}

function maskPaste(oEvent, masktype, maxlen) {
	var strPasteData = window.clipboardData.getData("Text");
	var oInput = oEvent.srcElement;

	if (!isValid(strPasteData, masktype) || (maxlen && oInput.value.length + strPasteData.length > maxlen)) {
		alert("Неверные входные данные");
		oInput.focus();
		return false;
	}
}

function MoveNext(oEvent, nextfield, maxlen) {
	var iKeyCode, strKey, oInput;

	if (isIE) {
		iKeyCode = oEvent.keyCode;
		oInput = oEvent.srcElement;
	} else {
		iKeyCode = oEvent.which;
		oInput = oEvent.target;
	}

	if((maxlen && oInput.value.length == maxlen) && nextfield){
		eval('document.iform.' + nextfield + '.focus()');
	}
}

function check_num(field, notempty, min, max){
	var val = field.value;
	if(notempty==1){
		if(val == ''){
			//alert('Поле не должно быть пустым');
			//field.focus();
			return true;
		} else {
			if ( isNaN( val ) )	return msg (field.name, 1, 'Не число');
			if ( min && val < min ) return msg (field.name, 1, 'меньше минимума');//isNaN( val )
			if ( max && val > max ) return msg (field.name, 1, 'больше максимума');//isNaN( val )
			return true;
		}
	}
}


emptyString = /^\s*$/

function msg(fld,     // id of element to display message in
             msgtype, // class to give element ("warn" or "error")
             message) // string to display
{
  // setting an empty string can give problems if later set to a
  // non-empty string, so slip in an nbsp if needed
  var dispmessage;
  if (emptyString.test(message))
    dispmessage = "&nbsp;";
  else
    dispmessage = message;

  var elem = document.getElementById(fld);

  if (elem.firstChild && (elem.firstChild.nodeType == 1))
    elem.firstChild.nodeValue = dispmessage;  // DOM method
  else
    elem.innerHTML = dispmessage; // IE method

};

function isEmpty(Str){
	var re = /\s/g; //Match any white space including space, tab, form-feed, etc.
	var str = Str.replace(re, "");
	if (str.length == 0) {
		return true;
	} else {
		return false;
	}
}

function validateFieldSet(form, emptyFieldSet, msgs){
	var i;
	var frm = document.forms[form];
	if(!frm){
		return true;
	}

	//return true if !frm;
	for (i=0; i<emptyFieldSet.length;i++){
		if(frm[emptyFieldSet[i]]){
			if(frm[emptyFieldSet[i]].length){
				if(frm[emptyFieldSet[i]][0].type && frm[emptyFieldSet[i]][0].type.toUpperCase() == 'RADIO'){

					var f = 0;
					for (i1=0; i1<frm[emptyFieldSet[i]].length;i1++){
						if(frm[emptyFieldSet[i]][i1].checked){
							f=1;
						}
					}
					if(f==0){
						
						alert('Необходимо выбрать вариант');
						return false;
					}
				} else if(frm[emptyFieldSet[i]].tagName.toUpperCase() == 'SELECT'){
					if(frm[emptyFieldSet[i]].options[frm[emptyFieldSet[i]].selectedIndex].value == 0){
						alert(frm[emptyFieldSet[i]].options[frm[emptyFieldSet[i]].selectedIndex].text);
						return false;
					};
				}

			}

			if(frm[emptyFieldSet[i]].tagName && (frm[emptyFieldSet[i]].tagName.toUpperCase() == 'INPUT' || frm[emptyFieldSet[i]].tagName.toUpperCase() == 'TEXTAREA') && isEmpty(frm[emptyFieldSet[i]].value)){
				var bg = frm[emptyFieldSet[i]].style.backgroundColor;
				frm[emptyFieldSet[i]].style.backgroundColor = '#ff4040';
				frm[emptyFieldSet[i]].focus();
				if(msgs[i] && msgs[i].toUpperCase() == 'YES'){
					alert('поле необходимо заполнить');
				} else {
					alert(msgs[i]);
				}
				frm[emptyFieldSet[i]].style.backgroundColor = bg;
				return false;
			}
		}
	}

	return true;
}
