function Trim ( text ) {
	text=text.replace(/^\s+/g,"");
	text=text.replace(/\s+$/g,"");
 	return text;
}


// функция isEmpty проверяет, содержит ли поле пустую строку.
// Возвращает:
// 0: если значение поля является не пустой строкой
// 1: если значение поля является пустой строкой
//-1: если объект не определен
function isEmpty ( objname ) {
	var objPointer, flag = 1;
	if (objPointer = document.getElementById(objname)) {
		if (objPointer.value = Trim(objPointer.value)) flag = 0;
	}
	else flag = -1;
	return flag;
}

// функция isNotSelect проверяет, является ли пустым выбранный элемент списка.
// Возвращает:
// 0: если значение поля является не пустым
// 1: если значение поля является пустым
//-1: если объект не определен
function isNotSelect ( objname ) {
	var objPointer, flag = 1;
	if (objPointer = document.getElementById(objname)) {
		if (objPointer.value) flag = 0;
	}
	else flag = -1;
	return flag;
}


// функция isNotFixNumber проверяет, содержит ли поле число заданной длины.
// Возвращает:
// 0: если значение поля является строкой из разрешенных символов
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы 
// 3: если длина значения поля не соответствует заданной длине
//-1: если объект не определен
function isNotFixNumber ( objname, len ) {
	var objPointer, flag = 1, re = /[^0-9]/;
	if (objPointer = document.getElementById(objname)) {
	 	if (!isEmpty (objname)) {
	  		if (objPointer.value.length == len) {
	   			if (!re.test(objPointer.value))
	    			flag = 0;
				else flag = 2;
			}
			else flag = 3;
		}
	}
	else flag = -1;
	return flag;
}


// функция isNotNumber проверяет, содержит ли поле число.
// Возвращает:
// 0: если значение поля является строкой из разрешенных символов
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы
//-1: если объект не определен
function isNotNumber ( objname ) {
	var objPointer, flag = 1, re = /[^0-9]/;
	if (objPointer = document.getElementById(objname)) {
	 	if (!isEmpty (objname)) {
   			if (!re.test(objPointer.value))
    			flag = 0;
			else flag = 2;
		}
	}
	else flag = -1;
	return flag;
}

// функция isNotRangeNumber проверяет, содержит ли поле число в заданном диапазоне.
// Возвращает:
// 0: если значение поля является строкой из разрешенных символов
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы
// 3: если значение поля не входит в заданный диапазон
//-1: если объект не определен
function isNotRangeNumber ( objname, start, stop ) {
	var objPointer, flag;
	flag=isNotNumber(objname);
	if (flag==0) {
	 objPointer=document.getElementById(objname);
	 if ((objPointer.value < start) || (objPointer.value > stop))
		flag = 3;
	}
	return flag;
}

// функция isNotPhoneNumber проверяет, содержит ли поле код или номер телефона.
// Возвращает:
// 0: если значение поля является строкой из разрешенных символов
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы
//-1: если объект не определен
function isNotPhoneNumber ( objname ) {
	var objPointer, flag = 1, re = /[^0-9\s\(\)\-\+]/;
	if (objPointer = document.getElementById(objname)) {
	 	if (!isEmpty (objname)) {
   			if (!re.test(objPointer.value))
    			flag = 0;
			else flag = 2;
		}
	}
	else flag = -1;
	return flag;
}

// функция isNotAmount проверяет, содержит ли поле данные о денежной сумме
// Возвращает:
// 0: если значение поля является строкой из разрешенных символов
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы
//-1: если объект не определен
function isNotAmount ( objname ) {
	var objPointer, flag = 1, re = /[^0-9\s\.\,]/;
	if (objPointer = document.getElementById(objname)) {
	 	if (!isEmpty (objname)) {
   			if (!re.test(objPointer.value))
    			flag = 0;
			else flag = 2;
		}
	}
	else flag = -1;
	return flag;
}


// функция isNotRusText проверяет, содержит ли поле только русский текст.
// Возвращает:
// 0: если значение поля является строкой из разрешенных символов
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы
//-1: если объект не определен
function isNotRusText ( objname ) {
	var objPointer, flag = 1, re = /[^а-яА-ЯёЁ\-\s]/i;
	if (objPointer = document.getElementById(objname)) {
		if (!isEmpty (objname)) {
			if (!re.test(objPointer.value))
	    		flag = 0;
			else flag = 2;
		}
	}
	else flag = -1;
	return flag;
}





// функция isNotEngText проверяет, содержит ли поле только английский текст.
// Возвращает:
// 0: если значение поля является строкой из разрешенных символов
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы
//-1: если объект не определен
function isNotEngText ( objname ) {
	var objPointer, flag = 1, re = /[^a-zA-Z\.\-\s]/i;
	if (objPointer = document.getElementById(objname)) {
		if (!isEmpty (objname)) {
			if (!re.test(objPointer.value))
	    		flag = 0;
			else flag = 2;
		}
	}
	else flag = -1;
	return flag;
}


// функция isNotEngDigText проверяет, содержит ли поле только английский текст.
// Возвращает:
// 0: если значение поля является строкой из разрешенных символов
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы
//-1: если объект не определен
function isNotEngDigText ( objname ) {
	var objPointer, flag = 1, re = /[^a-zA-Z0-9\.\-\s]/i;
	if (objPointer = document.getElementById(objname)) {
		if (!isEmpty (objname)) {
			if (!re.test(objPointer.value))
	    		flag = 0;
			else flag = 2;
		}
	}
	else flag = -1;
	return flag;
}



// функция isNotEmail проверяет, содержит ли поле адрес эл. почты.
// Возвращает:
// 0: если значение поля является строкой из разрешенных символов
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы
//-1: если объект не определен
function isNotEmail ( objname ) {
	var objPointer, flag = 1, re = /^[\w\.\-]+@[\w\.\-]+\.[A-Za-z]{2,4}$/;
	if (objPointer = document.getElementById(objname)) {
		if (!isEmpty (objname)) {
			if (re.test(objPointer.value))
	    		flag = 0;
			else flag = 2;
		}
	}
	else flag = -1;
	return flag;
}

// функция isNotChecked проверяет, отмечен ли один из элементов типа Radio
// Возвращает:
// 0: если элемент отмечен
// 1: если элемент не отмечен
//-1: если объект не определен
function isNotRadioChecked( objname, number ) {
	var objPointer, flag = 1, i = 1;
	while ((flag==1) && (i<=number)) {
		if (objPointer = document.getElementById(objname+''+i)) {
			if (objPointer.checked)  flag = 0;
		}
		else flag = -1;
		i++;
	}
	return flag;
}


// функция isNotCheckboxChecked проверяет, отмечен ли один из элементов типа Checkbox
// Возвращает:
// 0: если элемент отмечен
// 1: если элемент не отмечен
//-1: если объект не определен
function isNotCheckboxChecked( objname, number ) {
	var objPointer, flag = 1, i = 1;
	while ((flag==1) && (i<=number)) {
		if (objPointer = document.getElementById(objname+i)) {
			if (objPointer.checked)  flag = 0;
		}
		else flag = -1;
		i++;
	}
	return flag;
}


// функция isNotINN проверяет, содержит ли поле число заданной длины.
// Возвращает:
// 0: если значение поля является корректным ИНН
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы 
// 3: если длина значения поля не соответствует заданной длине
// 4: если введен некорректный ИНН
//-1: если объект не определен
function isNotINN ( objname ) {
	var objPointer, flag = 1, len = 10, tmp=0, re = /[^0-9]/;
	var mult = new Array(2,4,10,3,5,9,4,6,8)
	if (objPointer = document.getElementById(objname)) {
		if (!isEmpty (objname)) {
			if (objPointer.value.length == len) {
				if (!re.test(objPointer.value)) {
					for (i=0; i<mult.length; i++)
						tmp+=parseInt(objPointer.value.charAt(i))*mult[i]
					tmp=tmp%11
					tmp = (tmp == 10) ? 0 : tmp
					if (tmp == parseInt(objPointer.value.charAt(9)))
						flag = 0;
					else flag = 4;
				}
				else flag = 2;
			}
			else flag = 3;
		}
	}
	else flag = -1;
	return flag;
}


// функция isNotOGRN проверяет, содержит ли поле число заданной длины.
// Возвращает:
// 0: если значение поля является корректным ОГРН
// 1: если значение поля является пустой строкой
// 2: если значение поля является строкой, содержащей запрещенные символы 
// 3: если длина значения поля не соответствует заданной длине
// 4: если введен некорректный ОГРН
//-1: если объект не определен
function isNotOGRN ( objname ) {
	var objPointer, flag = 1, len = 13, tmp=0, re = /[^0-9]/;
	if (objPointer = document.getElementById(objname)) {
		if (!isEmpty (objname)) {
			if (objPointer.value.length == len) {
				if (!re.test(objPointer.value)) {
					tmp=parseInt(objPointer.value.substr(0,12))%11
					tmp = (tmp == 10) ? 0 : tmp
					if (tmp == parseInt(objPointer.value.charAt(12)))
						flag = 0;
					else flag = 4;
				}
				else flag = 2;
			}
			else flag = 3;
		}
	}
	else flag = -1;
	return flag;
}


// функция isNotPromoCode проверяет, содержит ли поле корректный промо-код.
// Возвращает:
// 0: если значение поля является строкой из разрешенных символов
// 1: если значение поля является строкой, содержащей запрещенные символы
//-1: если объект не определен
function isNotPromoCode( objname ) {
	var objPointer, flag = 1, APC = new Array( "", "WEC", "WEF", "OZON", "GEO1", "GEO2", "GEO3", "GEO4", "GEO5", "GEO6", "GEO7", "GEO8", "GEO9", "VOKRUGSVETA1", "VOKRUGSVETA2", "VOKRUGSVETA3", "VOKRUGSVETA4", "VOKRUGSVETA5", "VOKRUGSVETA6", "VOKRUGSVETA7", "VOKRUGSVETA8", "VOKRUGSVETA9", "VOKRUGSVETA-1", "VOKRUGSVETA-2", "VOKRUGSVETA-3", "VOKRUGSVETA-4", "VOKRUGSVETA-5", "VOKRUGSVETA-6", "VOKRUGSVETA-7", "VOKRUGSVETA-8", "VOKRUGSVETA-9", "SAMARA4", "SAMARA-4", "САМАРА4", "САМАРА-4", "КОРБИНА" );
	if (objPointer = document.getElementById(objname)) {
		objPointer.value = Trim(objPointer.value);
		for( i=0; i<APC.length; i++ )	{
			if ( objPointer.value.toUpperCase() == APC[i] )  flag = 0;
		}
	}
	else flag = -1;
	return flag;
}


// функция isNotRightFile проверяет, является ли файл допустимого типа: "jpg",  "jpeg",  "gif", "png", "bmp", "doc", "docx", "xls", "pdf", "ppt", "zip", "txt", "rtf", "msg" 
// Возвращает:
// 0: если тип файла является допустимым
// 1: если тип файла не является допустимым
//-1: если объект не определен
function isNotRightFile ( objname ) {
	var badChars = new Array( ";", ",", "|", "\\", "/", "?", ";", '"', "'", ":", "<", ">", "^", "#", "&", "(", ")", "*", "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ь", "ы", "ъ", "э", "ю", "я", "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ь", "Ы", "Ъ", "Э", "Ю", "Я" )
	var objPointer, p, filename, ext, flag = 1, FileExt = new Array( "", "jpg",  "jpeg",  "gif", "png", "bmp", "doc", "docx", "xls", "pdf", "ppt", "zip", "txt", "rtf", "msg" )
	if( objPointer = document.getElementById( objname) ) {
		ext = Trim( objPointer.value )
		ext = ext.substring( ext.lastIndexOf(".")+1, ext.length).toLowerCase()
		for( i=0; i<FileExt.length; i++ )
			if ( ext == FileExt[i] ) flag=0
		p = objPointer.value.lastIndexOf("\\")+1
		filename = objPointer.value.substring(p, objPointer.value.length)
		for( i=0; i<badChars.length; i++ )
			if ( filename.indexOf( badChars[i]) >=0 ) flag=1
	}
	else flag = -1;
	return flag;
}


function clearAll(items,flag) {
	var i;
	for(i=0; i<items.length; i++) {
		if (objPointer = document.getElementById(items[i][0])) {
			if (flag=='item') {
				objPointer.style.border = "1px solid #999999";
				objPointer.style.background = "#F5F5F5";
			}
			else if (flag=='pad'){
				objPointer.style.border = "0px solid #FFFFFF";
				objPointer.style.background = "#FFFFFF";
			}
		}
	}
}


function makeFocus(item,msg,flag) {
	objPointer = document.getElementById(item[0] + ((item[1]=="radio") || (item[1]=="checkbox") ? "1" : ""));
	if (!objPointer) alert ("Ошибка при инициализации объекта " + item[0]);
	else {
		if (msg[flag]==null) alert ("Неизвестная ошибка при обработке объекта " + item[0]);
		else {
			if ((item[1]!="radio") && (item[1]!="checkbox")) {
				objPointer.style.border = "1px solid #CC0000";
				objPointer.style.background = "#FFFFE5";
				alert(msg[flag]);
				objPointer.focus()
			}
			else { 
				alert(msg[flag]);
				if (radio_pad = document.getElementById(item[0]+'_pad')) {
					radio_pad.style.border = "1px solid #CC0000";
					radio_pad.style.background = "#FFFFE5";
				}
				else
				document.getElementById(item[0]+1).focus();
			}
		}
  	}
}

//============================== Фокусировка и снятие фокуса при помощи стилей ===============================

function makeFocusCSS(item,msg,flag) {
	var class_name
	objPointer = document.getElementById(item[0] + ((item[1]=="radio") || (item[1]=="checkbox") ? "1" : ""));
	if (!objPointer) alert ("Ошибка при инициализации объекта " + item[0]);
	else {
		if (msg[flag]==null) alert ("Неизвестная ошибка при обработке объекта " + item[0]);
		else {
			if ((item[1]!="radio") && (item[1]!="checkbox")) {
				if (objPointer.className.indexOf('_error')==-1)
					objPointer.className=objPointer.className+'_error'
				alert(msg[flag]);
				objPointer.focus()
			}
			else { 
				if (objPointer.className.indexOf('_error')==-1)
					class_name=objPointer.className+'_error'
				for (var i=1; i<=item[3]; i++)
					document.getElementById(item[0]+''+i).className=class_name
				alert(msg[flag])
				objPointer.focus()
			}
		}
  	}
}

function clearAllCSS(items,flag) {
	var i, class_name;
	for(i=0; i<items.length; i++) {
		if (objPointer = document.getElementById(items[i][0])) {
			if (objPointer.className.indexOf('_error')!=-1)
				class_name=objPointer.className.substring(0,objPointer.className.indexOf('_error'))
			else class_name=objPointer.className
			
			if ((items[i][1]!="radio") && (items[i][1]!="checkbox"))
			objPointer.className=class_name
			else {
				for (var k=1; k<=items[i][3]; k++)
					document.getElementById(items[i][0]+''+k).className=class_name
			}

		}
	}
}



// функция заменяет запрещенные символы в текстовых полях формы
// el - имя поля
// re - шаблон для фильтрации (БЕЗ граничных символов /)
// param - модификаторы шаблона (i,g итд)
// repl - строка, замещающая отфильтрованные символы
// len - максимальная длина текстового поля
 function filter(el,re,param,repl,len) {
 	var reg_exp = new RegExp(re,param)
	var msg = document.getElementById(el).value
	msg = msg.substr(0,len)
	msg = msg.replace(reg_exp,repl)
	return msg
 }



function validator ( item ) {
	var objPointer, flag=-1;
	switch (item[1]) {

		case 'simple':		flag = isEmpty(item[0]);
							break;

		case 'select':		flag = isNotSelect(item[0]);
							break;
							
		case 'rustext':		flag = isNotRusText(item[0]);
							break;
		
		case 'engtext':		flag = isNotEngText(item[0]);
							break;
		
		case 'engdigtext':	flag = isNotEngDigText(item[0]);
							break;
		
		case 'email':		flag = isNotEmail(item[0]);
							break;

		case 'number':		flag = isNotNumber(item[0]);
							break;
			
		case 'fixnumber':	flag = isNotFixNumber(item[0],item[3]);
							break;

		case 'phonenumber':	flag = isNotPhoneNumber(item[0]);
							break;

		case 'rangenumber':	flag = isNotRangeNumber(item[0],item[3],item[4]);
							break;

		case 'amount':		flag = isNotAmount(item[0]);
							break;
		
		case 'radio':		flag = isNotRadioChecked(item[0],item[3]);
							break;
		
		case 'checkbox':	flag = isNotCheckboxChecked(item[0],item[3]);
							break;	

		case 'inn':			flag = isNotINN(item[0]);
							break;
							
		case 'ogrn':		flag = isNotOGRN(item[0]);
							break;														

		case 'promocode':	flag = isNotPromoCode(item[0]);
							break;														

		case 'file':	flag = isNotRightFile(item[0]);
							break;														
	}
	return flag;
}

function Parse_Query() {
 var params=new Array("","","","","","","","","","")
 var ss=unescape(document.location.search)
 var temp=ss.split("=")
 if (temp[1]) {
  var temp2=temp[1].split("|#|")
  for(var i=0; i<temp2.length; i++)
   params[i]=temp2[i]
 }
 return params;
}

