function buildElements(){
	buildTextInputs();
	buildButtons();
	buildCheckBoxes();
	buildRadios();
}

/*--------------------------------------------ЧЕКБОКС----------------------------------------------------------------*/
function buildCheckBoxes(){
	$(".checkElement").each(function(i){buildCheckBox(this);});
	$(".checkElement").each(function(i){
		if(!this.onclick)
			this.onclick=function(){
				updateCheckState(this);
			};
	});
}

function buildCheckBox(divBlock){
	var Input = divBlock.childNodes[findElInChilds(divBlock,"INPUT")];
	var SPAN = divBlock.childNodes[findElInChilds(divBlock,"SPAN")];
	var checked = '';
	var value = '0';
	var text = '';
	var inputCheckedValue = '';
	if(Input.checked){
		checked = 'Selected';
		inputCheckedValue = ' checked="checked"';
	}
	value = 'on';
	var retPos = Input.value.search("ret");

	if(retPos>-1){
		text = Input.value.substr(0,retPos-1);
		value = Input.value.substr(retPos+4,100);
	}
	else text = SPAN.innerHTML;
	divBlock.innerHTML = '<img src="templates/default/images/elements/check'+checked+'.png"><input type="checkbox"'+inputCheckedValue+' style="z-index:-100;position:absolute" name="'+Input.name+'" value="'+value+'"><span>'+text+'</span>';

}

// функция меняет состояние чекбокса на противоположное (простейшее нажатие на чекбокс)
function updateCheckState(el){
	var img, input;
	img = el.childNodes[findElInChilds(el,"IMG")];
	input = el.childNodes[findElInChilds(el,"INPUT")];
	//document.getElementById('info').innerHTML = showProperties(img, img);
	if(img.src.search("Selected")!=-1){
		img.src = "templates/default/images/elements/check.png";
		input.checked = null;
	}
	else{
		img.src = "templates/default/images/elements/checkSelected.png";
		input.checked = "TRUE";
	}
}
//ФУНКЦИЯ ВЫСТАВЛЯЕТ НУЖНОЕ СОСТОЯНИЕ ЧЕКБОКСА
function setCheck(el,setVal){
	var img, input;
	img = el.childNodes[findElInChilds(el,"IMG")];
	input = el.childNodes[findElInChilds(el,"INPUT")];
	if(!setVal){
		img.src = "templates/default/images/elements/check.png";
		input.checked = null;
	}
	else{
		img.src = "templates/default/images/elements/checkSelected.png";
		input.checked = "TRUE";
	}
}
//ФУНКЦИЯ ВЫСТАВЛЯЕТ СОСТОЯНИЕ ТЕКУЩЕГО ЧЕКБОКСА ВСЕМ ЧЕКБОКСАМ ЗАДАННОЙ ГРУППЫ
function checkall(el,form,group){
	updateCheckState(el);
	var elCheckBox = returnElFromChilds(el,"INPUT");
	var elem = document.forms[form].elements;
	var first = -1;
	for (var i = 0; i < elem.length; i++){
		if(elem[i].name == group && ('qq'+elem[i].name).search(elCheckBox.name) == -1){
			if(elCheckBox.checked)setCheck(elem[i].parentNode,1);
			else setCheck(elem[i].parentNode,0);
			if(first == -1)first = i;
		}
	}
	if(elem[first])setCheck(elem[first].parentNode,1);
}
//ФУНКЦИЯ В ОТЛИЧИЕ ОТ checkall ПРОВЕРЯЕТ НЕ СОВПАДЕНИЕ group, А ЛИШЬ ВХОЖДЕНИЕ
function checkall2(el,form,group){
	updateCheckState(el);
	var elCheckBox = returnElFromChilds(el,"INPUT");
	var elem = document.forms[form].elements;
	var first = -1;
	for (var i = 0; i < elem.length; i++){
		if(elem[i].name.search(group) > -1 && ('qq'+elem[i].name).search(elCheckBox.name) == -1){
			if(elCheckBox.checked)setCheck(elem[i].parentNode,1);
			else setCheck(elem[i].parentNode,0);
			if(first == -1)first = i;
		}
	}
	if(elem[first])setCheck(elem[first].parentNode,1);
}
//ФУНКЦИЯ МЕНЯЕТ СОСТОЯНИЕ ГЛАВНОГО ЧЕКБОКСА ИСХОДЯ ИЗ СОСТОЯНИЙ ГРУППЫ ЭЛЕМЕНТОВ
function checkk(el,form,group,all_el_name){
	updateCheckState(el);
	var elem = document.forms[form].elements;
	var sum = 0;
	var cnt = 0;
	var all_el = document.forms[form].elements[all_el_name];
	for (var i = 0; i < elem.length; i++){
		if(elem[i].name == group && ('qq'+elem[i].name).search(all_el_name) == -1){
			if(elem[i].checked) sum ++;
			cnt ++;
		}
	}
	if(sum == cnt)setCheck(all_el.parentNode,1);
	else setCheck(all_el.parentNode,0);
}
//АНАЛОГИЧНО
function checkk2(el,form,group,all_el_name){
	updateCheckState(el);
	var elem = document.forms[form].elements;
	var sum = 0;
	var cnt = 0;
	var all_el = document.forms[form].elements[all_el_name];
	for (var i = 0; i < elem.length; i++){
		if(elem[i].name.search(group) > -1 && ('qq'+elem[i].name).search(all_el_name) == -1){
			if(elem[i].checked) sum ++;
			cnt ++;
		}
	}
	if(sum == cnt)setCheck(all_el.parentNode,1);
	else setCheck(all_el.parentNode,0);
}
function checkCheckState(el){
	var elCheckBox = returnElFromChilds(el,"INPUT");
	if(elCheckBox.checked)return true;
	else return false;
}

// -------------- функции для группового выделения / снятия -----------

// функция для главного чекбокса, устанавливает значение указанного элемента в
// противоположное (нажатие на чекбокс), и устанавливает значение группы в значение
// указанного главного элемента
// параметры: ae - сам групповой элемент, cid - id контейнера, где лежит группа
function _checkAll(ae,cid){
	updateCheckState(ae);
	var state = checkCheckState(ae);
	els = $('#'+cid+' .checkElement:not(#'+ae.id+')');
	for(var i = 0; i < els.length; i++)setCheck(els[i],state);
}

// функция для чекбокса из группы, устанавливает значение указанного элемента в
// противоположное (нажатие на чекбокс), и выставляет значение главного чекбокса
// по значениям чекбоксов группы
// параметры: e - чекбокс из группы, aeid - id главного чекбокса,
// cid - id контейнера, где лежит группа
function _check(e,aeid,cid){
	updateCheckState(e);
	els = $('#'+cid+' .checkElement:not(#'+aeid+')');
	var selected = 0;
	for (var i = 0; i < els.length; i++){
		if(checkCheckState(els[i]))selected ++;
	}
	setCheck($('#'+aeid)[0],selected == els.length);
}

// -------------- end of функции для группового выделения / снятия ----

/*--------------------------------------------END OF ЧЕКБОКС---------------------------------------------------------*/

/*--------------------------------------------РАДИО------------------------------------------------------------------*/
function buildRadios(){
	$(".radioElement").each(function(i){buildRadio(this);});
	$(".radioElement").each(function(i){
		if(!this.onclick)
			this.onclick=function(){
				updateRadioState(this,2);
			};
	});
}

function buildRadio(divBlock){

	var Input = divBlock.childNodes[findElInChilds(divBlock,"INPUT")];
	var checked = '';
	var value = '';
	var text = '';
	var inputCheckedValue = '';
	if(Input.checked){
		checked = 'Selected';
		inputCheckedValue = ' checked="checked"';
	}
	value = 'on';
	var retPos = Input.value.search("ret");
	if(retPos>-1){
		text = Input.value.substr(0,retPos-1);
		value = Input.value.substr(retPos+4,100);
	}

	var IMG = '<img src="templates/default/images/elements/radio'+checked+'.png">';
	if(!$("SPAN",divBlock)[0])
	divBlock.innerHTML = IMG+'<input type="radio"'+inputCheckedValue+' style="z-index:-100;position:absolute;left:-500px;top:-50px;" name="'+Input.name+'" value="'+value+'"><span>'+text+'</span>';
	//divBlock.innerHTML = IMG+'<input type="radio"'+inputCheckedValue+' style="z-index:-100;position:absolute" name="'+Input.name+'" value="'+value+'"><span class="f18">'+text+'</span>';
	//alert(divBlock.innerHTML);

}
function updateRadioState(el,state){
	var img, input;
	img = el.childNodes[findElInChilds(el,"IMG")];
	input = el.childNodes[findElInChilds(el,"INPUT")];
	img.style.display = 'inline';
	if(state == 0){//if simply radio turn off
		img.src = "templates/default/images/elements/radio.png";
		input.checked = null;
	}
	if(state == 2 || state == 3){
		//state 2 - if we click on radio, appropriate radio turn ON, and all in group turns OFF
		//state 3 - onLoad manipulations, it's needs only for update INPUT values
		if(state == 2){
			var elements = document.getElementsByTagName("DIV");
			for(i=0;i<elements.length;i++){
				if(elements[i].className == "radioElement"){
					elementsInput = elements[i].childNodes[findElInChilds(elements[i],"INPUT")];
					if(elementsInput.name == input.name)
						updateRadioState(elements[i],0);
				}
			}
		}
		img.src = "templates/default/images/elements/radioSelected.png";
		input.checked = "checked";
	}
	if(state == 4){// invert selection
		if(input.checked)updateRadioState(el,0);
		else updateRadioState(el,3);
	}
}
function checkRadioState(el){
	var elRadio = returnElFromChilds(el,"INPUT");
	if(elRadio.checked)return true;
	else return false;
}
/*--------------------------------------------END OF РАДИО------------------------------------------------------------*/

/*--------------------------------------------ГЛАВНОЕ МЕНЮ------------------------------------------------------------*/

function hide(el){
	
}
function highlightTopMenu(el,highlight){
	var i;
	if($.browser.msie&&parseInt($.browser.version)==9|| $.browser.opera || $.browser.mozilla || $.browser.safari){
		var leftBlock = el.childNodes[1];
		var centerBlock = el.childNodes[3];
		var rightBlock = el.childNodes[5];
	}/*
	else{
		var leftBlock = el.childNodes[0];
		var centerBlock = el.childNodes[1];
		var rightBlock = el.childNodes[2];
	}*/
	if(highlight){
	    if($.browser.msie&&parseInt($.browser.version)==9|| $.browser.opera || $.browser.mozilla || $.browser.safari){
		leftBlock.style.backgroundImage = "url(templates/default/images/topMenu/topMenuSelectedl1l.gif)";
		rightBlock.style.backgroundImage = "url(templates/default/images/topMenu/topMenuSelectedl1r.gif)";
		centerBlock.style.backgroundImage = "url(templates/default/images/topMenu/topMenuSelectedl1b.gif)";}
		$('.topSubMenuL2',el).each(function(i){this.style.display="block";});
	}
	else{
	    if($.browser.msie&&parseInt($.browser.version)==9|| $.browser.opera || $.browser.mozilla || $.browser.safari){
		leftBlock.style.backgroundImage = "";
		rightBlock.style.backgroundImage = "";
		centerBlock.style.backgroundImage = "";}
		$('.topSubMenuL2',el).each(function(i){this.style.display="none";});
		
		
	}
}

/*--------------------------------------------END OF ГЛАВНОЕ МЕНЮ-----------------------------------------------------*/

/*--------------------------------------------КНОПКИ------------------------------------------------------------------*/
function buildButtons(){
	$(".greenButton").each(function(i){buildButton(this,'green');});
	$(".redButton").each(function(i){buildButton(this,'red');});
}

function buildButton(buttonBlock,color){
	if(!returnElFromChilds(buttonBlock,'TABLE')){
		var buttonValue = buttonBlock.innerHTML;
		buttonBlock.innerHTML = '<table border="0" cellpadding="0" cellspacing="0"><tr><td class="'+color+'ButtonL"></td><td class="'+color+'ButtonC">'+buttonValue+'</td><td class="'+color+'ButtonR"></td></tr></table>';
		buttonBlock.onmouseover=function(){changeButtonColor(this,color,1);};
		buttonBlock.onmouseout=function(){changeButtonColor(this,color,0);};
		buttonBlock.onmousedown=function(){changeButtonColor(this,color,2);};
		buttonBlock.onmouseup=function(){changeButtonColor(this,color,1);};
	}
}
function changeButtonColor(el,color,state){
	el = returnElFromChilds(el,"TABLE");
	var td1 = el.childNodes[0].childNodes[0].childNodes[0];
	var td2 = el.childNodes[0].childNodes[0].childNodes[1];
	var td3 = el.childNodes[0].childNodes[0].childNodes[2];
	switch(state){
		case 0: 
				td1.className = color+"ButtonL";
				td2.className = color+"ButtonC";
				td3.className = color+"ButtonR";
			break;
		case 1: 
				td1.className = color+"ButtonLhover";
				td2.className = color+"ButtonChover";
				td3.className = color+"ButtonRhover";
			break;
		case 2: 
				td1.className = color+"ButtonLclick";
				td2.className = color+"ButtonCclick";
				td3.className = color+"ButtonRclick";
			break;
	}
}
/*--------------------------------------------END OF КНОПКИ-----------------------------------------------------------*/

/*--------------------------------------------ДИАЛОГ------------------------------------------------------------------*/
function buildDialog(dialog){
	var dialogContent = dialog.innerHTML;
	if(dialog.style.width){
		var table = returnElFromChilds(dialog,"TABLE");
		var width = ' width="'+dialog.style.width+'"';
	}
	if(!returnElFromChilds(dialog,'TABLE')){
		dialog.innerHTML = '<table cellpadding="0" cellspacing="0" border="0"><tr><td class="ltd"><img src="templates/default/images/dialog/lt.png"></td><td class="ctd"></td><td class="rtd"><img src="templates/default/images/dialog/rt.png"></td></tr><tr><td class="lmd"></td><td class="cmd">'+dialogContent+'</td><td class="rmd"></td></tr><tr><td><img src="templates/default/images/dialog/lb.png"></td><td class="cbd"></td><td><img src="templates/default/images/dialog/rb.png"></td></tr></table>';
	}
	//works only on IE6, fix his bug
	//try{$(function(){$(document).pngFix();})}catch(e){;}
	setTimeout("try{$(function(){$(document).pngFix();})}catch(e){;}",1);
}
/*--------------------------------------------END OF ДИАЛОГ-----------------------------------------------------------*/

/*--------------------------------------------ОСНОВНАЯ ТАБЛИЦА--------------------------------------------------------*/
function buildMainTable(table){
	var TRelements = $("TR",table);
	var TR, TD, INPUT;
	for(var i = 0; i < TRelements.length; i++){
		TR = TRelements[i];

		TR.onmouseover=function(){highlightMainTable(this,1);};
		TR.onmouseout=function(){highlightMainTable(this,0);};
		TR.onmouseup=function(){highlightMainTable(this,2);};
		notSelectOnInputClick(TR);

		TD = $("TD",TR);
		if(TD){
			
			//нужно чтоб в опере корректно работали ondblclick и select одновременно
			if($.browser.opera){
				TD.each(function(){
					if(!$("select",this)[0])
					this.onmousedown=function(){this.focus();}
				});
			}
			
			//INPUT = returnElFromChilds(TD,"INPUT");
			INPUT = $(".unvisibleInput",TR)[0];
			if(INPUT)TR.style.cursor = 'pointer';
			if(INPUT&&INPUT.checked){
				TR.style.background = '#CADFF3';
			}
		}
	}
}

function highlightMainTable(tr,highlight){
	var input = $(".unvisibleInput",tr)[0];
	//var input = returnElFromChilds(returnElFromChilds(tr,"TD"),"INPUT");
	//alert(input);
	switch(highlight){
		case 0://onmouseout
				if(!input||input&&!input.checked)tr.style.background = 'white';
			break;
		case 1://onmouseover
				var firstTD = returnElFromChilds(tr,"TD");
				var highlightTR;
				//highlightTR нужна для того, чтоб не подсвечивалась первая ячейка, если у нее rowspan больше 1
				//mayHighLight равна true, если на странице есть элемент may_highlight_with_rowspan
				//тоесть если есть элемент, то можно подсвечивать первую строку даже если у нее rowspan больше 1
				var mayHighLight = false;
				if(document.getElementById('may_highlight_with_rowspan'))mayHighLight = true;
				
				if(firstTD&&firstTD.rowSpan&&firstTD.rowSpan>1&&!mayHighLight)highlightTR = false;
				else highlightTR = true;
				
				if(!input||input&&!input.checked)tr.style.background = '#EAF0F8';
				
				if(!highlightTR)firstTD.style.background = 'white';
				$('td',tr).each(function(){
					if(this.rowSpan>1 && this != firstTD)this.style.background = 'white';
				});
			break;
		case 2://onmouseup
				if(!input||input&&input.checked){
					tr.style.background = '#EAF0F8';
					if(input&&input.checked)input.checked = null; 
				}
				else if(input){
					tr.style.background = '#CADFF3';
					if(input&&!input.checked)input.checked = "checked";
				}
			break;
		case 3://deselect
				tr.style.background = 'white';
				input.checked = null; 
			break;
		case 4://select
				tr.style.background = '#CADFF3';
				if(input&&!input.checked)input.checked = "checked";
			break;
	}
}
function notSelectOnInputClick(tr){//чтоб при нажатии на инпут в строке, строка не выделялась
	var input;
	for(var i = 0; i < tr.childNodes.length; i++){
		if(isThisTag(tr.childNodes[i],"TD")){
			for(var j = 0; j < tr.childNodes[i].childNodes.length; j++){
				if(isThisTag(tr.childNodes[i].childNodes[j],"INPUT")){
					input = tr.childNodes[i].childNodes[j];
					input.onclick = function(){highlightMainTable(this.parentNode.parentNode,2);}
				}
			}
		}
	}
}
/*--------------------------------------------END OF ОСНОВНАЯ ТАБЛИЦА-------------------------------------------------*/

/*--------------------------------------------ТЕКСТ ИНПУТ-------------------------------------------------------------*/
function buildTextInputs(){
	$(".textInput").each(function(i){buildTextMenu(this);});
	
	if(!($.browser.msie&&$.browser.version==5.2))
		$("select").each(function(i){buildTextMenu(this);});
}

function highlightTextInput(el,over){
	if(!($.browser.msie && $.browser.version == 7 && el.tagName == 'SELECT')){//если не браузер ie7 и не комбобокс

		if(
			el.style.backgroundColor != "rgb(255, 202, 202)" &&
			el.style.backgroundColor != "#FFAAAA"&&!el.readOnly
		){
			if(over == 1)el.style.backgroundColor = "#EAF0F8";
			if(over == 0)el.style.backgroundColor = "#FFFFFF";
		}
	}
}

function buildTextMenu(el){
	el.onmouseover=function(){highlightTextInput(this,1);};
	el.onmouseout=function(){highlightTextInput(this,0);};
	if(!el.readOnly&&!el.onfocus){
		el.onfocus=function(){this.style.borderColor = "#65686E";};
		el.onblur=function(){this.style.borderColor = "#ADB0B7";};
	}
	if(el.readOnly)el.style.cursor = 'default';
}

/*--------------------------------------------END OF ТЕКСТ ИНПУТ------------------------------------------------------*/

