
// ........................................................
// Скрытые блоки привязанные к Checkboxу
function cmsSetHiddenBlockFor(checkboxName,blockName){
	var oCheckbox,oBlock;
	if((oBlock=document.getElementById(blockName)) && 
		 (oCheckbox=document.getElementById(checkboxName))){
		oCheckbox.blockName = blockName;
	}
}
function cmsShowHiddenBlock(oCheckbox){
	var oBlock;
	if(oCheckbox.blockName &&
		(oBlock=document.getElementById(oCheckbox.blockName))){
		oBlock.style.display = (oCheckbox.checked)?"block":"none";
	}
}
// ........................................................
// Установка привязки битовых Checkboxов к Inputу
function cmsSetBitCheckboxesFor(inputName,checkboxesBitSize){
	var oInput,oBitCheckbox;
	if(oInput=document.getElementById(inputName)){
		oInput.checkboxesBitSize = checkboxesBitSize;
		var value = oInput.value*1;
		for(var i=0; i<checkboxesBitSize;i++){
			if(oBitCheckbox=document.getElementById(inputName+"_"+i)){
				oBitCheckbox.checked = ((value&(1<<i))>0);
				cmsChangeCheckbox(oBitCheckbox);
			}
		}
	}
}
// ........................................................
// Установка значения Selectа
function cmsSetSelectValue(selectName,selectValue){
	var oSelect;
	var value = (selectValue)?selectValue:false;
	if(oSelect=document.getElementById(selectName)){
		if(value){
			for(var i=0; i<oSelect.options.length;i++){
				if(oSelect.options[i].value == value){
					oSelect.selectedIndex = i;
				}
			}
		}
		cmsChangeSelect(oSelect);
	}
}
// ........................................................
// Изменение состояния Checkboxа
function cmsChangeCheckbox(oCheckbox){
	var oInput;
	var names = oCheckbox.id.split("_");
	if(oInput=document.getElementById(names[0])){
		var value = oInput.value*1;
		oInput.value = (oCheckbox.checked)?value|(1<<names[1]):value-(value&(1<<names[1]));
	}
	cmsShowHiddenBlock(oCheckbox);
}
// ........................................................
// Изменение состояния Selectа
function cmsChangeSelect(oSelect){
	var oInput;
	var mask = 0;
	var names = oSelect.id.split("_");
	if((names.length)>1 && (oInput=document.getElementById(names[0]))){
		for(var i=0;i<oInput.checkboxesBitSize;i++) mask += 1 << i;
		oInput.value = (oInput.value & mask) | oSelect.value;
		var value = oSelect.value & mask;
		for(var i=0; i<oInput.checkboxesBitSize;i++){
			if(oBitCheckbox=document.getElementById(names[0]+"_"+i)){
				oBitCheckbox.disabled = ((value&(1<<i))>0);
			}
		}
		cmsSetBitCheckboxesFor(names[0],oInput.checkboxesBitSize);
	}
}
//===========================================
//  контроль длины вводимого текста
//===========================================
function cnter(MaxLen,idText) {
//===========================================
	var Otext = document.getElementById(idText);
	if (Otext){
		if(Otext.value.length > MaxLen) {
			Otext.value = Otext.value.substring(0,MaxLen);
			alert("Это поле не может быть длиннее "+MaxLen+" символов.");
			Otext.focus();
		}
	}
}
// ........................................................
// Проверка введенных данных
	function cmsCheckInputValue(oInput,type){
		var iclass = oInput.getAttribute(classFix);
		var pos = iclass.indexOf("cms_errorfield");
		if(pos>=0){ 
			if(pos==0) oInput.removeAttribute(classFix);
			else			 oInput.setAttribute(classFix,iclass.substr(0,pos-1));
		}
		switch(type){
			case 0: // положительное целое
				if(oInput.value != oInput.value*1 || !(oInput.value>=0)){
					alert("Infill error: positive integer only\nОшибка заполнения поля: только положительное целое");
					oInput.value = 0;
					oInput.focus();
					if(oInput.getAttribute(classFix).length>0)	oInput.setAttribute(classFix,oInput.getAttribute(classFix)+" cms_errorfield");
					else																				oInput.setAttribute(classFix,"cms_errorfield");
					return false;
				}else{
					oInput.value = Math.abs(Math.round(oInput.value));
					return true;
				}
			break;
			case 1: // email
				var re_mail = /([\w\.\-_]+@[\w\.\-_]+)/;
				if(oInput.value.match(re_mail)!=null){
					return true;
				}else{
					alert("Infill error: email address needed\nОшибка заполнения поля: требуется email адрес");
					oInput.focus();
					if(oInput.getAttribute(classFix).length>0)	{
						oInput.setAttribute(classFix,oInput.getAttribute(classFix)+" cms_errorfield");
					}else{
						oInput.setAttribute(classFix,"cms_errorfield");
					}
					return false;
				}
			break;
			default: // не пустое
				if(oInput.value.length>=3){
					return true;
				}else{
					alert("Infill error: text needed\nОшибка заполнения поля: требуется текст");
					oInput.focus();
					if(oInput.getAttribute(classFix).length>0)	oInput.setAttribute(classFix,oInput.getAttribute(classFix)+" cms_errorfield");
					else																				oInput.setAttribute(classFix,"cms_errorfield");
					return false;
				}
			break;
		}
	}
// ........................................................
// Версия для печати
var cmsPrintObject = null;
var cmsHideObject = null;
function cmsPrintVersion(){
	if(cmsPrintObject==null){
		cmsPrintObject = document.createElement("div");
		cmsPrintObject.setAttribute(classFix,"cms_printversion");
		cmsPrintObject.appendChild(document.getElementById("cms_navigation").cloneNode(1));
		cmsPrintObject.appendChild(document.getElementById("cms_nodecontent").cloneNode(1));
		
		cmsHideObject = document.createElement("div");
		cmsHideObject.innerHTML = document.body.innerHTML;
		document.body.innerHTML = "";
		cmsHideObject.style.display = "none";
		
		document.body.appendChild(cmsPrintObject);
		document.body.appendChild(cmsHideObject);
	}else{
		document.body.innerHTML = cmsHideObject.innerHTML;
		cmsPrintObject = null;
		cmsHideObject = null;
	}
}
// ........................................................
// Функция поиска и подсветки текста в заданом ноде и его потомхах
function searchInNode(node, word, word_length){
			//alert(111);
	var word_position, skip, spannode, middlebit, endbit, middleclone;
	skip=0;
	word = word.toLowerCase();
	if(node.nodeType==3){
		word_position=node.data.toLowerCase().indexOf(word);
		var pre_word = (word_position>0?node.data.substr(word_position-1,1):"");
		if(word_position>=0 && (word_position==1 || pre_word==" " 
			|| pre_word=="(" || pre_word=="" || pre_word=="'" || pre_word=='"')){
			spannode=document.createElement("span");
			spannode.setAttribute(classFix,"cms_illuminate");
			middlebit=node.splitText(word_position);
			endbit=middlebit.splitText(word_length);
			middleclone=middlebit.cloneNode(true);
			spannode.appendChild(middleclone);
			middlebit.parentNode.replaceChild(spannode,middlebit);
			skip=1;
		}
	}else if(node.nodeType==1&& node.childNodes && node.tagName.toUpperCase()!="SCRIPT" && node.tagName.toUpperCase!="STYLE"){
		for (var child=0; child < node.childNodes.length; ++child){
			child=child+searchInNode(node.childNodes[child], word, word_length);
		}
	}
	return skip;
}

// ........................................................
// Добавление полей в форму обратной связи
var cmsFormAddedFields = new Array;

function cmsFormNewField(num){
	var oFormCanvas	=document.getElementById("cms_formcanvas");
	var oFormField	=document.getElementById("cms_formfield");
	var oNumber = cmsFormAddedFields.length;
	var tempElements;
	if(num>=0) oNumber = num;
	else			 cmsFormAddedFields[oNumber] = new Array(0,"заголовок","");
	var oNewField = oFormField.cloneNode(true);
	oNewField.removeAttribute("id");
	oNewField.style.display = "block";
	oFormCanvas.appendChild(oNewField);
	tempElements = oNewField.getElementsByTagName("select");
	if(tempElements.length>0){
		tempElements[0].setAttribute("name","felements["+oNumber+"][ftype]");
		for(var i=0;i<tempElements[0].options.length;i++){
			if(tempElements[0].options[i].value==cmsFormAddedFields[oNumber][0]) tempElements[0].selectedIndex = i;
		}
	}
	tempElements = oNewField.getElementsByTagName("input");
	if(tempElements.length>0){
		tempElements[0].setAttribute("name","felements["+oNumber+"][fname]");
		tempElements[0].value = cmsFormAddedFields[oNumber][1];
	}
	tempElements = oNewField.getElementsByTagName("textarea");
	if(tempElements.length>0){
		tempElements[0].setAttribute("name","felements["+oNumber+"][fdefault]");
		tempElements[0].value = cmsFormAddedFields[oNumber][2];
	}
}
function cmsFormUpdate(){
	for(var i=0;i<cmsFormAddedFields.length;i++) cmsFormNewField(i);
}
function cmsFormClear(){
	var oFormCanvas	=document.getElementById("cms_formcanvas");
	oFormCanvas.innerHTML = "";
	cmsFormAddedFields = new Array;
}
function cmsFormClearLast(){
	var _cmsFormAddedFields = cmsFormAddedFields;
	cmsFormClear();
	for(var i=0;i<(_cmsFormAddedFields.length-1);i++){
		cmsFormAddedFields[i] = _cmsFormAddedFields[i];
		cmsFormNewField(i);
	}
}
// ........................................................
// Добавление полей в форму голосования
var cmsPollAddedFields = new Array;

function cmsPollNewField(num){
	var oFormCanvas	=document.getElementById("cms_pollcanvas");
	var oFormField	=document.getElementById("cms_pollfield");
	var oNumber = cmsPollAddedFields.length;
	var tempElements;
	if(num>=0) oNumber = num;
	else			 cmsPollAddedFields[oNumber] = new Array("вариант","0");
	var oNewField = oFormField.cloneNode(true);
	oNewField.removeAttribute("id");
	oNewField.style.display = "block";
	oFormCanvas.appendChild(oNewField);
	tempElements = oNewField.getElementsByTagName("input");
		tempElements[0].setAttribute("name","felements["+oNumber+"][fname]");
		tempElements[0].value = cmsPollAddedFields[oNumber][0];
		tempElements[1].setAttribute("name","felements["+oNumber+"][fvalue]");
		tempElements[1].value = cmsPollAddedFields[oNumber][1];
}
function cmsPollUpdate(){
	for(var i=0;i<cmsPollAddedFields.length;i++) cmsPollNewField(i);
}
function cmsPollClear(){
	var oFormCanvas	=document.getElementById("cms_pollcanvas");
	oFormCanvas.innerHTML = "";
	cmsPollAddedFields = new Array;
}
function cmsPollClearLast(){
	var _cmsPollAddedFields = cmsPollAddedFields;
	cmsPollClear();
	for(var i=0;i<(_cmsPollAddedFields.length-1);i++){
		cmsPollAddedFields[i] = _cmsPollAddedFields[i];
		cmsPollNewField(i);
	}
}
// ........................................................
// Добавление картинки голосования
var cmsPollSummary = 0;
function cmsPollResult(num,value){
	var oPollCanvas	=document.getElementById("cms_pollresult_"+num);
	var oPollField	=document.getElementById("cms_pollresult");
	var oNumber = cmsPollAddedFields.length;
	var tempElements;
	if(oPollCanvas && oPollField){
		var oNewField = oPollField.cloneNode(true);
		oNewField.style.display = "inline";
		oNewField.removeAttribute("id");
		value = (cmsPollSummary>0)?value/cmsPollSummary:0.01;
		oNewField.width = Math.ceil(oNewField.width * value);
		oPollCanvas.appendChild(oNewField);
	}
}
