function ltrim(text){
	var index = 0;
	while (text.charAt(index) == " " || text.charAt(index) == "\t") {
		index++;
	}
	return text.substr(index);
}

function rtrim(text) {
	var index = text.length - 1;
	while (text.charAt(index) == " " || text.charAt(index) == "\t") {
		index--;
	}
	return text.substring(0, index + 1);
}

function trim(text){
	return ltrim(rtrim(text));
}

function getLabelForElement(elem) {
	var labels = elem.form.getElementsByTagName('label');
	var labelsLength = labels.length;
	var label;
	for (var i = 0; i < labelsLength; i++) {
		if (labels[i].htmlFor == elem.id) {
			label = labels[i];
			break;
		}
	}
	return label;
}

function isEmpty(str) {
	var re = /^\s*$/;
	var result = str.match(re) ? true : false;
	return result;
}

function isEMailAddr(str) {
	var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
	var result = str.match(re) ? true : false;
	return result;
}

function checkForm(frm) {
	var labels = frm.getElementsByTagName('label');
	var labelsLength = labels.length;
	var elements = frm.elements;
	var requiredElements = new Array();
	var requiredElementsTypes = new Array();
	var j = 0;
	for (var i = 0; i < labelsLength; i++) {
		if (labels[i] &&labels[i].lastChild.nodeName.toLowerCase() == 'span' && labels[i].lastChild.firstChild.nodeValue == '*' && document.getElementById(labels[i].htmlFor)) {
			if (labels[i].lastChild.className == 'email') {
				requiredElementsTypes[j] = 'email';
			} else if (labels[i].lastChild.className == 'url') {
				requiredElementsTypes[j] = 'url';
			} else {
				requiredElementsTypes[j] = '';
			}
			requiredElements[j] = document.getElementById(labels[i].htmlFor);
			j++;
		}
	}
	requiredElementsLength = requiredElements.length;
	var elementsEmpty = new Array();
	var elementsWrong = new Array();
	var elementForFocus;
	if (requiredElementsLength) {
		var m = 0;
		var n = 0;
		for (var k = 0; k < requiredElementsLength; k++) {
			if (isEmpty(requiredElements[k].value)) {
				elementsEmpty[m] = requiredElements[k];
				m++;
			} else {
				if (requiredElementsTypes[k] == 'email' && !isEMailAddr(requiredElements[k].value)) {
					elementsWrong[n] = requiredElements[k];
					n++;
				}
			}
		}
		var elementsEmptyLength = elementsEmpty.length;
		var elementsWrongLength = elementsWrong.length;
		var mymsg;
		var mybull = '\u2014 ';
		var mytrailing;
		if (elementsEmptyLength) {
			if (elementsEmptyLength == 1) {
				mymsg = 'Внимание, не заполнено следующее обязательное поле:\n\n';
			} else {
				mymsg = 'Внимание, не заполнены следующие обязательные поля:\n\n';
			}
			for (var p = 0; p < elementsEmptyLength; p++) {
				if (p < elementsEmptyLength - 1) {
					mytrailing = ','
				} else {
					mytrailing = '.'
				}
				mymsg += mybull + trim(getLabelForElement(elementsEmpty[p]).firstChild.nodeValue) + mytrailing + '\n';
			}
			alert(mymsg);
			elementsEmpty[0].focus();
			return false;
		} else if (elementsWrongLength) {
			if (elementsWrongLength == 1) {
				mymsg = 'Внимание, следующее поле заполнено неправильно:\n\n';
			} else {
				mymsg = 'Внимание, следующие поля заполнены неправильно:\n\n';
			}
			for (var p = 0; p < elementsWrongLength; p++) {
				if (p < elementsWrongLength - 1) {
					mytrailing = ','
				} else {
					mytrailing = '.'
				}
				mymsg += mybull + trim(getLabelForElement(elementsWrong[p]).firstChild.nodeValue) + mytrailing + '\n';
			}
			alert(mymsg);
			elementsWrong[0].focus();
			return false;
		}
	}
	return true;
}