/**
* Библиотека Dinamic Form
* 
* @author Dimitri Bashev
*/
var classFix = (document.all)?"className":"class";
/**
* Класс DF_BitwiseInput
* 
*/
function DF_BitwiseInput(sName,iBitSize){
	var oCheckbox;
	var oInput = document.getElementById(sName);
	// ... обработка события onClick привязанного Checkboxа
	this.onCheckboxClick = function(){
		var sNames = this.id.split("_");
		var bBitMask = 1<<sNames[1];
		var bBitValue = (this.checked*1)<<sNames[1];
		oInput.value = (oInput.value&~bBitMask)|bBitValue;
	}
	// ... привязка Checkboxов
	if(oInput){
		var iInputValue = oInput.value*1;
		for(var i=0; i<iBitSize;i++){
			if(oCheckbox=document.getElementById(sName+"_"+i)){
				oCheckbox.checked = ((iInputValue&(1<<i))>0);
				// ... привязка событий по onClick
				oCheckbox.onclick = this.onCheckboxClick;
			}
		}
	}
}
/**
* Класс DF_Select
* 
*/
function DF_Select(sName){
	var oSelect = document.getElementById(sName);
	var aExtendedValues = new Array();
	// ... метод изменения значения по value
	this.setByValue = function(sValue){
		for(var i=0; i<oSelect.options.length;i++)
			if(oSelect.options[i].value == sValue) oSelect.selectedIndex = i;
	}	
	// ... установка расширенного Inputa на значение
	this.setExtendedInputByValue = function(sValue){ 
		aExtendedValues[aExtendedValues.length] = sValue; 
	}
	// ... обработка события onChange
	this.onChange = function(){
		for(var i=0; i<aExtendedValues.length;i++)
			if(oSelect.options[oSelect.selectedIndex].value == aExtendedValues[i]){
				var oExtendedInput = document.createElement("INPUT");
				oExtendedInput.style.width = oSelect.style.width;
				oExtendedInput.name = oSelect.name;
				oExtendedInput.value = oSelect.value;
				oSelect.parentNode.replaceChild(oExtendedInput,oSelect);
			}
	}
	// ... привязка событий по onChange
	oSelect.onchange = this.onChange;
}
// ........................................................
// Проверка введенных данных
	function DF_CheckInputValue(oInput,type,title){
		var iclass = oInput.getAttribute(classFix);
		var title = title || oInput.getAttribute("name");
		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("Ошибка заполнения поля «"+title+"»: только положительное целое!");
					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("Ошибка заполнения поля «"+title+"»: требуется 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("Ошибка заполнения поля «"+title+"»: требуется текст!");
					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;
		}
	}
