//---------------------------------------------
function FocusFirst(oForm) {
	if ("" + oForm == "unknown" || oForm == null) return;
	var targetInput = document.getElementsByName('Target')[0];
	var actInput = document.getElementsByName('act')[0];
	var unallowableCombinations = [{
		target: 'railway',
		acts: ['get_places']
	},
	{
		target: 'teleplane',
		acts: ['get_places', 'get_optimal_price']
	},
	{
		target: 'teleplanefare',
		acts: ['show']
	}];
	if (targetInput && actInput) {
		for (var i = 0; i < unallowableCombinations.length; i++) {
			var unallowableCombination = unallowableCombinations[i];
			for (var j = 0; j < unallowableCombination.acts.length; j++) {
				var act = unallowableCombination.acts[j];
				if (targetInput.value == unallowableCombination.target
					&& actInput.value == act)
					return;
			}	
		}
	}
	for (var i = 0; i < oForm.elements.length; i++) {

		if (oForm.elements[i].type.toLowerCase() != "hidden" && !oForm.elements[i].disabled && IsElementDisplayed(oForm.elements[i]))
		{ oForm.elements[i].focus(); return; }

	}

}

//определяет есть ли родительский элемент у указанного элемента, который display=none.
function IsElementDisplayed(el) {
	while (el.parentElement) {
		el = el.parentElement;
		if (el.style.display && el.style.display == 'none') return false;
	}
	return true;
}

//---------------------------------
function FormatNumber(val, scale) {

	val = "" + val;
	var num = parseFloat(val.replace(",", "."))
	var sign = "";
	if (isNaN(scale)) scale = 2;
	if (isNaN(num) || num == 0) {
		num = "0,000000000000".substr(0, scale + 2);
	}
	else {

		num = Math.round(num * Math.pow(10, scale));
		if (num < 0) sign = "-";
		num = "" + Math.abs(num)

		num = "000".substr(0, 3 - num.length) + num;
		num = sign + num.substr(0, num.length - scale) + "," + num.substr(num.length - scale);
	}
	return num;
}
//---------------------------------
function CalcCol(obj) {
	var name = obj.id;
	var objects = document.all(name);
	var sum = 0;
	var num;

	var oSum = document.all(name + "_sum");
	if (objects != null) {
		if ("" + objects.length != "undefined") {
			for (var i = 0; i < objects.length; i++) {
				num = parseFloat(objects[i].value.replace(',', '.'));
				if (!isNaN(num)) sum += num;
			}
		}
		else {
			num = parseFloat(objects.value.replace(',', '.'));
			if (!isNaN(num)) sum += num;
		}
	}


	if (oSum != null) oSum.innerText = FormatNumber(sum);

}

//-----------------------------------
function GetValue(name) {
	var obj = document.all(name);
	if (obj == null) return 0;
	num = parseFloat(obj.innerText.replace(",", "."));
	if (isNaN(num)) num = 0;
	return num;
}
//-----------------------------------
function SetValue(name, value) {
	var obj = document.all(name);
	if (obj == null) return;
	obj.innerText = "" + value;
}
//-----------------------------------

function CalcOverall(Sections, obj) {
	var overall = 0;

	for (var i = 0; i < Sections.length; i++) {
		CalcSection = Sections[i];
		var num;
		oSum = document.all(CalcSection);
		if (oSum != null) {
			num = parseFloat(oSum.innerText.replace(",", "."))
			if (!isNaN(num)) overall += num;

		}
	}

	if (obj != null) obj.innerText = FormatNumber(overall);

}

//-------------------------------------------------------
function KeyCheck(obj) {
	if (event.keyCode != 13) return true;
	var objs = document.all(obj.id);
	if (objs == null) return true;
	for (var i = 0; i < objs.length; i++) {
		if (objs[i] == obj) if ("" + objs[i + 1] != "undefined") objs[i + 1].focus();
	}

}


//-------------------------------------------------------
function isFloat(obj, format) {

	if ((event.keyCode == 13 || event.keyCode == 9 || event.keyCode == 189) && obj.value == "") return true;
	//	alert(event.keyCode)
	var chrCode = event.keyCode;
	if (chrCode == 110) chrCode = 46;
	if (chrCode > 90) chrCode = chrCode - 48;

	if (val == "-") return true;
	var val = obj.value.replace(",", ".") + String.fromCharCode(chrCode);

	if (format == "int") val = parseInt(val); else val = parseFloat(val);
	if (isNaN(val)) return false;
	return true;
}

function isInt(obj) {
	var range = obj.createTextRange();
	if (event.ctrlKey == 1) return true;
	if (event.keyCode == 8 || event.keyCode == 35 || event.keyCode == 36 || event.keyCode == 37
			|| event.keyCode == 39 || event.keyCode == 46)
		return true;
	if (event.shiftKey == 1) return false;
	var chrCode = event.keyCode;
	if (chrCode == 110) chrCode = 46;
	if (chrCode > 90) chrCode = chrCode - 48;
	var val = obj.value;
	if (val.indexOf('-') < 0 && event.keyCode == 189 && event.shiftKey == 0) return true;
	val += String.fromCharCode(chrCode); //считаем, что запись в конец происходит
	var reInt = /^-?[0-9]+$/g;
	if (reInt.test(val))
		return true;
	return false;
}


//-------------------------------------------------
function Repair(obj, format, scale) {
	if (obj.value == '') {
		if (arguments.length > 2) obj.value = arguments[2];
		else obj.value = '0,00';
		//return;
	}
	if (format == "int") {
		var val = parseInt(obj.value);
		if (isNaN(val)) val = 0;
		obj.value = val;
	}
	else obj.value = FormatNumber(obj.value, scale)

}
//-------------------------------------------------
function FormatDate(i, delKey, direction) {
	if (i.value == "") return;
	if (i.value.length < 10) {
		if (delKey != 9) { //tab
			if (delKey != 8 && delKey != 46 && delKey != 16 && !(delKey > 36 && delKey < 41)) { //if the delete, backspace, shift, are not the keys that caused the keyup event.
				var fieldLen = i.value.length
				if ((delKey >= 48 && delKey <= 57) || (delKey >= 96 && delKey <= 105)) {
					if (fieldLen == 2 || fieldLen == 5) {
						i.value = i.value + ".";
					}
				} else {
					if (direction == "up") {
						if (i.value.length == 0) {
							i.value = ""
						} else {
							i.value = i.value.substring(0, i.value.length - 1)
						}
					}
				}
				i.focus()
			}
		} else {
			if (direction == "down") {
				CheckDate(i)
			}
		}
	}
}
//-------------------------------------------------
function CheckDate(THISDATE) {
	var err = 0
	a = THISDATE.value
	if (a == "") return;
	if (a.length < 8) err = 2
	b = a.substring(0, 2)// day
	c = a.substring(2, 3)// '.'
	d = a.substring(3, 5)// month
	e = a.substring(5, 6)// '.'
	f = a.substring(6, 10)// year

	if (b < 1 || b > 31) err = 2
	if (d < 1 || d > 12) err = 2
	if (d == 4 || d == 6 || d == 9 || d == 11) {
		if (b == 31) err = 2
	}
	if (d == 2) {
		var g = parseInt(f / 4)
		if (isNaN(g)) {
			err = 2
		}
		if (b > 29) err = 3
		if (b == 29 && ((f / 4) != parseInt(f / 4))) err = 13
	}
	if (!err && !dateValidator.checkDefaultSQLRange(a)) {
		err = 4;
	}

	if (err == 1) {
		alert('Вы ввели ' + THISDATE.value + ' - в выбранном вами месяце нет 31 числа ... Попробуйте набрать снова!');
	}
	if (err == 2) {
		alert('Вы ввели ' + THISDATE.value + ' - Вас не смущает эта дата ? Нам кажется, что допущена ошибка...  Попробуйте набрать снова!');
	}
	if (err == 3) {
		alert('Вы ввели ' + THISDATE.value + ' - в феврале не бывает более 29 дней ... Попробуйте набрать снова !');
	}
	if (err == 13) {
		alert('Вы ввели ' + THISDATE.value + ' - в этом году в феврале не было 29 числа ... Попробуйте набрать снова!');
	}
	if (err == 4) {
		alert('Поле заполнено неверно.');
	}

	if (err != 0) {
		//		    		THISDATE.value = "";
		THISDATE.focus();
		THISDATE.select();
	}
}
