var requireds=new Array();

function registrationElements(form){
	var els=form.elements;
	for(var i=0;els[i];i++){
		if(els[i].getAttribute("required"))requireds.push(els[i]);
	}
}

function checkForRequired(frameId){
	var xrequireds;
	if(frameId){
		var frame=regFrames[frameId];
		xrequireds=new Array();
		var names=['input','textarea'];
		for(var i=0;names[i];i++){
			var inputs=frame.getElementsByTagName(names[i]);
			for(j=0;inputs[j];j++){
				if(inputs[j].getAttribute("required")) xrequireds.push(inputs[j]);
			}
		}
	} else xrequireds=requireds;
	/*for(var i=0;xrequireds[i];i++){
		if(!xrequireds[i].value && !cmnMatch_class(xrequireds[i].parentNode.parentNode,"hide")){
			alert(errMsgs[lang]['empty_fld_pre']+xrequireds[i].getAttribute("caption")+errMsgs[lang]['empty_fld_post']);
			if(!frameId||frameId!=showedFrame.id) goToFrame(xrequireds[i]);
			if(!xrequireds[i].focuser) xrequireds[i].focus(); else {
				xrequireds[i].focuser.focus();
			}
			return false;
		}
	}*/
	return true;
}

function changeRequired(reqitem,submitter){
	if(submitter){
		if(reqitem.value==""){
			submitter.disabled=true;
			return;
		}
		var els=reqitem.form.elements;
		for(var i=0;i<els.length;i++){
			if(els[i]!=reqitem && !els[i].disabled && els[i].getAttribute("required")=="true"){
				if(els[i].value==""){
					submitter.disabled=true;
					return;
				}
			}
		}
		submitter.disabled=false;
	}
	else {
		submitter=reqitem.btnSubmit;
		var els=reqitem.elements;
		for(var i=0;i<els.length;i++){
			if(!els[i].disabled && els[i].getAttribute("required")=="true"){
				if(els[i].value==""){
					submitter.disabled=true;
					return;
				}
			}
		}
		submitter.disabled=false;
	}
}

function checkDimensions(frameId){
	var xdims=new Array();
	if(!frameId) return;
	if(frameId && !frameId.method){
		var frame=regFrames[frameId];
		var names=['input','textarea'];
		for(var i=0;names[i];i++){
			var inputs=frame.getElementsByTagName(names[i]);
			for(j=0;inputs[j];j++){
				if(inputs[j].getAttribute("dimension")) xdims.push(inputs[j]);
			}
		}
	} else {
		for(var i=0;frameId.elements[i];i++){
			if(frameId.elements[i].getAttribute("dimension"))xdims.push(frameId.elements[i]);
		}
	}

	for(var i=0;xdims[i];i++){
		switch(xdims[i].getAttribute("dimension")){
			case "string":
				if(xdims[i].getAttribute("checkDimension")){
					var res=true;
					eval("res="+xdims[i].getAttribute("checkDimension")+"(xdims[i]);");
					return res;
				}
				if(xdims[i].value=="") return false;
				break;
			case "int":
				if(!xdims[i].value.match(/^\d+$/)) return false;
				break;
		}
		return true;
	}
}

function goToFrame(element){
	var p=element.parentNode;
	while(p){
		if(p.id in regFrames){switchFrameToMe(p.id);return;}
		p=p.parentNode;
	}
}

function sendForm(form){
	registrationElements(form);
	var res=checkForRequired();
	return res;
}

var showedFrame=null;
var regFrames=new Object();
var checkedChecker=null;
var ___frame_index=0;

function registryFrame(frameId){
	if(document.getElementById(frameId)){
		var frame=document.getElementById(frameId);
		regFrames[frameId]=frame;
		frame.prevFrame=regFrames.lastFrame;
		regFrames.lastFrame=frame;
		frame.iIndex=___frame_index;
		if(frame.getAttribute("default")){
			showedFrame=frame; 
			checkedChecker=document.getElementById("checker-"+frameId);
		} else frame.style.display="none";
	}
	___frame_index++;
}

function switchFrameToMe(frameId){
	if(frameId==showedFrame.id) return;
	var forward_direction=showedFrame.iIndex<regFrames[frameId].iIndex;
	/*Нам можно переходить в случае:
		1. Если производится переход назад (в любом случае);
		2. Если у текущего фрейма заполнены все обязательные поля и все поля имеют правильный тип;
		3. Если у предыдущего фрейма заполнены все обязательные поля;
	*/
	if(forward_direction && !(checkForRequired(showedFrame.id) && checkDimensions(showedFrame.id))) return;
	if(regFrames[frameId].prevFrame && !checkForRequired(regFrames[frameId].prevFrame.id)) return;
	var frame=document.getElementById(frameId);
	var checker=document.getElementById("checker-"+frameId);
	if(showedFrame) showedFrame.style.display="none";
	frame.style.display="block";
	showedFrame=frame;
	if(checkedChecker) checkedChecker.className="frame-checker";
	checker.className="frame-checker checked";
	checkedChecker=checker;
	eval(frame.getAttribute("onchange")+"(frame);");
}

function switchSibling(element){
	var _element=element;
	while(_element.nodeName!="TR") _element=_element.parentNode;
	_element=_element.nextSibling;
	if(element.checked){
		cmnRemove_class(_element,"hide");
		var iobj=_element.getElementsByTagName("div")[0];
		if(iobj){
			var oId=setInterval(incHeight,5);
			___heights[oId]=new Object();
			___heights[oId].height=iobj.offsetHeight;
			___heights[oId].object=iobj;
			___heights[oId].step=5;
			___ids[___ids.length]=oId;

			iobj.style.height=1;
			iobj.style.overflow="hidden";
		}
	}
	else cmnSet_class(_element,"hide");	

}

var ___heights=new Object();
var ___ids=new Array;
function incHeight(){
	for(var i=0;i<___ids.length;i++){
		var opened=___heights[___ids[i]].object;
		var height=___heights[___ids[i]].height;
		var step=___heights[___ids[i]].step;
		if(opened.offsetHeight+step>height) step=height-opened.offsetHeight;
		if(opened.offsetHeight < height){
			opened.style.height=opened.offsetHeight+step;
			if(opened.offsetHeight>=height){
				opened.style.height="auto";
				opened.style.overflow="visible";
				clearInterval(___ids[i]);
				___ids.splice(i,1);
				i--;
			}
		} else {
			clearInterval(___ids[i]);
			___ids.splice(i,1);
			i--;
		}
	}
}

function switchVisible(elname){
	var el=document.getElementById(elname);
	if(el) if(el.offsetHeight){
		el.olddisplay=el.style.display;
		el.style.display='none';
	}else {
		el.style.display=el.olddisplay;
	}
}

function checkForDate(bone,fname,id,element){
	var xnode=element.parentNode;
	var els=xnode.childNodes;
	var inputer=document.getElementById(fname+"-"+id);
	/*для начала проверим состояние элемента*/
	var re=new RegExp("^((\\w+)-)?"+fname+"$");
	var knd;
	var cyear=new Date().getFullYear();
	//Надо получить все данные
	var day;
	var month;
	var year;
	var _day;
	var _month;
	var _year;
	switch(bone){
		case 'day':
			day=element;
			month=element.form["month-"+fname];
			year=element.form["year-"+fname];
			break;
		case 'month':
			day=element.form["day-"+fname];
			month=element;
			year=element.form["year-"+fname];
			break;
		case 'year':
			day=element.form["day-"+fname];
			month=element.form["month-"+fname];
			year=element;
			break;
	}
	_day=Number(day.value);
	_year=Number(year.value);
	_month=month.selectedIndex;
	//Проверим день
	if(_day>getDayOfMonth(_year,_month)){
		day.style.backgroundColor="#FFAAAA";
		return;
	}
	day.style.backgroundColor="transparent";

	if(_year<cyear-90 || _year>cyear-20){
		year.style.backgroundColor="#FFAAAA";
		return;
	}
	year.style.backgroundColor="transparent";
	if(inputer){
		inputer.value=_day+"."+(_month+1)+"."+_year;
	}
}



function getDayOfMonth(year,month){	
	var days=[31,28,31,30,31,30,31,31,30,31,30,31];
	if(month==1 && isLeapYear(year)) return days[month]+1;
	return days[month];
}

function isLeapYear(year){
	return !(year % 4) && ((year % 100) || !(year %400));
}

/*каждые 4 года
но не каждые 100 лет
но каждые 400 лет

!(y%4) && ((y%100) || !(y%400))
1900 !0 && (0 || !1) = 1 && (0 || 0) = 0 - не високосный
2000 !0 && (0 || !0) = 1 && (0 || 1) = 1 - високосный
1980 !0 && (1 || !1) = 1 && (1 || 0) = 1 - високосный
1999 !1 &&


*/

var __blocks=new Object;

function removeLastBlock(blockname,spanner,maxcount){
	var docs = __blocks[blockname][0];
	if(!docs || __blocks[blockname].length<3){
		return;
	}
	var ln=__blocks[blockname].length
	var lastBlock=__blocks[blockname][ln-1];
	docs.parentNode.removeChild(lastBlock);
	__blocks[blockname].splice(ln-1,1);
	if(ln==3) spanner.style.display="none";
	if(__blocks[blockname].length<maxcount+1) spanner.nextSibling.style.display="inline";	
}


function addNewBlock(blockname,spanner,maxcount){
	var docs = __blocks[blockname][0];
	if(!docs) return;
	var index=__blocks[blockname].length
	spanner.previousSibling.style.display="inline";
	var parent=docs.parentNode;
	var xdoc=docs.cloneNode(true);
	__blocks[blockname][1].style.paddingTop="0.9em";
	var height=__blocks[blockname][1].offsetHeight;
	__blocks[blockname][1].style.paddingTop="0em";

	var oId=window.setInterval(incHeight,5);
	___heights[oId]=new Object();
	___heights[oId].height=height;
	___heights[oId].object=xdoc;
	___heights[oId].step=height/20;
	___ids[___ids.length]=oId;

	xdoc.style.overflow="hidden";
	xdoc.style.height="1px";

	xdoc.style.borderTop="1px solid #D0D0D0";
	xdoc.style.paddingTop="0.9em";
	xdoc.style.display="block";
	__blocks[blockname][index]=xdoc;
	parent.insertBefore(xdoc,spanner.previousSibling);
	
	var inputs = xdoc.getElementsByTagName("input");
	var tareas = xdoc.getElementsByTagName("textarea");
	var ad=new Array();
	ad[0]=inputs;
	ad[1]=tareas;
	var labels = xdoc.getElementsByTagName("label");
	var cnt=0;
	for(var k=0;k<ad.length;k++){
		var xinputs=ad[k];
		for(var i=0;i<xinputs.length;i++){
			if(cnt==0){
				appendix=xinputs[i].name;
				xinputs[i].value=index;
			} else {
				xinputs[i].name=appendix+"-"+xinputs[i].name+"_"+index;
				if(xinputs[i].id){
					for(var j=0;j<labels.length;j++)
						if(labels[j].htmlFor==xinputs[i].id){
							xinputs[i].id=appendix+"-"+xinputs[i].id+"-"+index;
							labels[j].htmlFor=xinputs[i].id;
						}
				}
			}
			xinputs[i].disabled=false;
			cnt++;
		}
	}

	if(maxcount && __blocks[blockname].length==maxcount+1){
		spanner.style.display="none";
	}
}

function registryBlock(blockname){
	var docs = document.getElementById(blockname);	
	var inputs=docs.getElementsByTagName("input");
	var tareas=docs.getElementsByTagName("textarea");
	var ad=new Array();
	ad[0]=inputs;
	ad[1]=tareas;
	for(var j=0;j<ad.length;j++){
		var xinputs=ad[j];
		for(var i=0;i<xinputs.length;i++){
			xinputs[i].disabled=true;
		}
	}
	docs.style.display="none";
	if(!__blocks[blockname]){
		__blocks[blockname]=new Array();
	}
	__blocks[blockname][0]=docs;
	if(!__blocks[blockname] || !__blocks[blockname][1]){
		var spanner=docs.nextSibling;
		var xdoc=docs.cloneNode(true);
		xdoc.style.display="block";

		inputs = xdoc.getElementsByTagName("input");
		tareas = xdoc.getElementsByTagName("textarea");
		var ad=new Array();
		ad[0]=inputs;
		ad[1]=tareas;
		var appendix;
		var ccnt=0;
		for(var j=0;j<ad.length;j++){
			var xinputs=ad[j];
			for(var i=0;i<xinputs.length;i++){
				if(ccnt==0){
					appendix=xinputs[i].name;
					xinputs[i].value=1;
				} else {
					xinputs[i].name=appendix+"-"+xinputs[i].name+"_"+1;
				}
				xinputs[i].disabled=false;
				ccnt++;
			}
		}

		docs.parentNode.insertBefore(xdoc,spanner.previousSibling);
		__blocks[blockname][1]=xdoc;
	}
}
