//финкции при въвеждане на полета
//Христо Марков Христов - 9 Април 2006 г.

//alert("zarejdam f.js palen");

scus_success=0;
scus_error=1;
scus_notfound=2;
scus_deadlock=3;
scus_exist=4;

kk=0;
eve=0;
scus_click=0; //не е кликнато върху полето - ако се кликне => става 1 (зарежда се от js на съотвентият ms)

function scusonkeydown(ff,e)
{
//alert(navigator.appName);
//alert(event.keyCode);
	eve=e;
	kk=navigator.appName=='Netscape'?e.which:event.keyCode;
	return scusonkeydown1(ff,kk);
}
function scusonkeydown1(ff,kk)
{
	var i,err=0,f;
	switch(+kk)
	{
		case 9:
			kk=13;
		case 13: //enter
		case 40: //down

		// командите от сл. ред ги слагам защото когато имаме поле-бутон => автоматично се изпраща и събитие Onclick заедно с натискането на enter. Следващите команди подтискат това изпращане на onclick
		
		//eve.keyCode=0;
		navigator.appName=='Netscape'?eve.preventDefault():event.returnValue=false;

		//
		case 1300: //enter предизвикан не от събитие ами от hw (help window). 1300 аз го измислих и го зарездам с kk
		//

		if(ff.value.length>ff.scuslen) ff.value=ff.value.slice(0,ff.scuslen);

		//хвърля данните в записа и затова не мога да сложа тук setvalue
		value_to_z(ff);

		//проверка за условие/стойност

		if(ff.tabIndex<document[ff.scusform.id].length)
		{
			readpi(ff);
			err=scusonfocus(document[ff.scusform.id].elements[ff.tabIndex]);
		}
		else //последно поле
		{
			scusmsexe(ff.scusform);
			ff.scusform.scusz1.r=0;
			document[ff.scusform.id].fff=0;
			err=scusonfocus(document[ff.scusform.id].elements[0]);
		}
		break;
		case 38: //up
		if (ff.tabIndex>1)
		{
//			document[ff.scusform.id].elements[ff.tabIndex-2].focus();
			err=scusonfocus(document[ff.scusform.id].elements[ff.tabIndex-2]);
		}
		break;
		case 33:  //PGUP
		case 27: //esc
			err=scusonfocus(document[ff.scusform.id].elements[0]);
		break;
		case 34:  //PGDN
		case 112: //F1
		break;
		case 113: //F2
			//event.keyCode=0; 
			navigator.appName=='Netscape'?event.preventDefault():event.returnValue=false;
		break;
		case 114: //F3
			//event.keyCode=0;
			navigator.appName=='Netscape'?event.preventDefault():event.returnValue=false;
		break;
		case 115: //F4
			//event.keyCode=0;
			navigator.appName=='Netscape'?event.preventDefault():event.returnValue=false;
		break;
		case 118: //F7
			//event.keyCode=0;
			navigator.appName=='Netscape'?event.preventDefault():event.returnValue=false;
		break;
		case 119: //F8
			//event.keyCode=0;
			navigator.appName=='Netscape'?event.preventDefault():event.returnValue=false;
		break;
		case 120: //F9
			//event.keyCode=0;
			navigator.appName=='Netscape'?event.preventDefault():event.returnValue=false;
		break;
		case 123: //F12
			//event.keyCode=0;
			navigator.appName=='Netscape'?event.preventDefault():event.returnValue=false;
		break;
	default:break;
	}
	kk=0;
	return err;
}

function readpi(ff) //чете запис ако полето е последното поле от ключа
{
	if(ff.scusnom==ff.scusform.scuspi) //прочетени са всички ключови полета
	{
		if((ret=ff.scusform.scusz1.read_first())!=scus_success)
		{
			//ако не е прочетен запис => анулявам всички полета които са след посл. ключово поле
			for(i=0;i<document[ff.scusform.id].length;i++)
			{
				f=document[ff.scusform.id].elements[i];
				if(typeof(f.scusnom)!='undefined')
				{
					if(+f.scusnom>+ff.scusnom) 
					{
						//занулявам стойностите на променливите от екрана
						setvalue(f,"");
						//занулявам стойностите на записа
						switch(+f.scustype)
						{
							case 4: //превръща дд.мм.гггг в цифра и е записва в записа, а на екрана остава dd.mm.gggg
								f.scusform.scusz1.s(f.scusnom,date_st(f.value));
								break;
							case 7: //превръща MM/DD/GGGG в цифра и е записва в записа, а на екрана остава MM/DD/GGGG
								f.scusform.scusz1.s(f.scusnom,date_st7(f.value));
							break;
							default: f.scusform.scusz1.s(f.scusnom,f.value);
							break;
						}
					}
				}
			}
		}
		//да продължа с изчисляване на хелп поле на тези полета които са по връзка
		//
				
	}
}

//показва дали е първо поле или не
//ms.fff==0 => първо поле (начало на екран)
//ms.fff==1 => не е първо поле
//ms.fff=0; 

function setvalue(f,st)
{
//	if(typeof(f.scusnom)!='undefined')
//	{

		switch(+f.scustype)
		{
		case 1: //числово
		case 2: //дясно изравнено
			f.value=st==""?0:st;
		break
		case 3: //text
			f.value=st==""?" ":st;
		break;
		case 4: //превръща цифра в дд.мм.гггг
			f.value=st_date(st);
		break;
		case 7: //превръща цифра в mm/dd/gggg
			f.value=st_date7(st);
		break;
		case 10: //за 10 и 11 - бутони да не се присвоява стойност от изчисление, защото се променя името на бутона
		case 11:
		break;
		default: f.value=st;
		break;
		}
//	}

}

function value_to_z(ff) //записва стойността на полето в записа
{
	if(typeof(ff.scusnom)!='undefined')
	{
		switch(+ff.scustype)
		{
			case 4: //превръща дд.мм.гггг в цифра и е записва в записа, а на екрана остава dd.mm.gggg
				ff.scusform.scusz1.s(ff.scusnom,date_st(ff.value));
				break;
			case 7: //превръща MM/DD/GGGG в цифра и е записва в записа, а на екрана остава MM/DD/GGGG
				ff.scusform.scusz1.s(ff.scusnom,date_st7(ff.value));
			break;
			default: ff.scusform.scusz1.s(ff.scusnom,ff.value);
			break;
		}
	}
}

function mscheckerr(ff) //провека за условие за грешка
{
	var ms=ff.scusform,err=0;

	if(typeof(ff.scuserr)!="undefined"&&ms.fff)
	{
		err=scusform.scusf(ff.scuserr,ms.scusz1);
		if(+err)
		{
			if(typeof(ff.scustexterr)!="undefined")
			{
				alert(scusform.scusf(ff.scustexterr,ms.scusz1));
			}
			else alert("INVALID VALUE");
			ff.select();
			ff.focus();
			err=1;
			return err;
		}
	}
	return err;
}


function scusonfocus(ff)
{
	var usl,st,ms=ff.scusform,err=0,af,vf,vnom,yesvir=0;
//alert(ms);
//alert(ms.id);
//alert(ms.fff);
//alert(ff.id);

	if(typeof(ms.fff)=="undefined") ms.fff=0;
	if(typeof(ms.af)=="undefined")
	{
		ms.af=document[ms.id].elements[0];
		ms.fff=0;
	}
	else if(ms.af==ff) return err;
	af=ms.af;
	if(af.tabIndex>ff.tabIndex) //връщане нагоре
	{
		af=ff; usl=typeof(af.scusst)!="undefined";
		if(typeof(af.scususl)!="undefined") usl=scusform.scusf(af.scususl,ms.scusz1);
		if(+usl) //ако е изпълнено условието на това поле => да се върне още по-нагоре
		{
			if(ff.tabIndex>1)
			{
				//има изпълнено условие и трябва да се вдигне още 1 поле нагоре
				scusonfocus(document[ms.id].elements[ff.tabIndex-2]);
			}
			else //стигнало е 1 поле и повече няма на къде да вдига нагоре
			{
				ms.af="undefined";
				ms.fff=0;
				scusonfocus(ff);
			}
			return err;
		}
	}
	else //движение надолу
	{
		if(scus_click) //ако движението надолу е предизвикано от кликване на по-долно поле, а не с "enter" или с "tab"
		{
			scus_click=0; value_to_z(af);
		}

		if(af.tabIndex==ff.tabIndex-1&&ms.fff) yesvir=1; //изчислявам вирт полета само ако е избрано сл. поле

		//ако af има help поле по връзка и не е първо поле от екрана(защото ако е първо => няма още стойност) => изчислявам го
		if(typeof(document[ms.id+"_F2F3"])!="undefined"&&typeof(kk)!="undefined"&&ms.fff)
		{
			if((kk==13||kk==40||kk==1300)&typeof(document[ms.id+"_F2F3"].elements[af.id+"_h"])!="undefined")
			{
				var hf=document[ms.id+"_F2F3"].elements[af.id+"_h"];
				st=scusform.scusf(hf.scusst,ms.scusz1);
				if((st==""||af.value=="")&&hf.scuszad=='1')
				{
					alert("INVALID VALUE! THE FIELD IS ON DUTY CONNECTION!");
					af.select();
					err=1;
					return err;
				}
				setvalue(hf,st);
			}
		}

		if(af.tabIndex<ff.tabIndex||ms.fff==0)
		{

			//1. ако е изпълнено условието за грешка на af => няма да се предвижи на сл. поле

			err=mscheckerr(af); if(err) return err;

			//2. ако ff== 1 поле от екрана => af=f
			//иначе af=af+1

			if(ms.fff==0) ms.af=ff;
			else ms.af=document[ms.id].elements[af.tabIndex]; //следващото поле става активно

			af=ms.af; ms.fff=1;
			
			//3. изчислявам първоначална стойност; условие/стойност

			//
			//изчисляване на първоначална стойност;
			//
//			alert(af.value);
			if(typeof(af.scusinit)!="undefined"&&(af.value==""||af.value==" ")) af.value=scusform.scusf(af.scusinit,ms.scusz1);
			//
			//изчисляване на условие/стойност
			//

			usl=typeof(af.scusst)!="undefined";
			if(typeof(af.scususl)!="undefined") usl=scusform.scusf(af.scususl,ms.scusz1);

//alert("af.id="+af.id+"usl="+usl+" af.tabindex="+af.tabIndex+" ff.tabindex="+ff.tabIndex);

			if(+usl||(af.tabIndex<ff.tabIndex))
			{
				//резултат от изчислението на формулата е в scusz1 формат, защото данните се вземат от полетата на записа
				//затова резултата го превръщам във формат за екран

				if(+usl)
				{
					st=typeof(af.scusst)!="undefined"?scusform.scusf(af.scusst,ms.scusz1):"";
					if(typeof(af.scusnom)!='undefined') ms.scusz1.s(af.scusnom,st);

					setvalue(af,st);
				}

				readpi(af);

				//ако е стигнало последно поле се връща в началото
				if(typeof(document[ms.id].elements[af.tabIndex])=="undefined")
				{
					err=mscheckerr(af);
					if(err) return err;

					scusmsexe(ms); ms.scusz1.r=0; ms.fff=0;
					scusonfocus(document[ms.id].elements[0]);
					return err;
				}

				//иначе изпълнява сл. поле
				kk=13;
				return scusonfocus(document[ms.id].elements[af.tabIndex]);

				//ако е зададена стойност на активното поле и то е равно на полето към което се насочва фокуса => фокуса отива на сл. поле
				//if(ff==af) ff=document[ms.id].elements[ff.tabIndex];
			}
		}

		//
		//изчислявам виртуални полета само ако има нова стойност (yesvir==1)
		//
		if(typeof(document[ms.id+"_v"])!="undefined"&&yesvir)
		{
			for(var i=0;i<document[ms.id+"_v"].elements.length;i++)
			{
				vf=document[ms.id+"_v"].elements[i];
				if(typeof(vf.scusform)=="undefined") //виртуално поле
				{
					if(typeof(vf.scusnom)=="undefined") continue;
					vnom=ms.scusz1.vnom[vf.scusnom];
					st=scusform.scusf(ms.scusz1.vform[vnom],ms.scusz1);
				}
				else ///формула на поле по връзка
				{
					st=scusform.scusf(vf.scusform,ms.scusz1);
				}
				setvalue(vf,st);
			}
		}
	}

	if(typeof(ff.scustype)!="undefined") //scus Полета
	{
		switch(+ff.scustype)
		{
			case 1: scusonfocus1(ff); break;
			case 2: scusonfocus2(ff); break;
			case 3: scusonfocus3(ff); break;
			case 4: scusonfocus4(ff); break;
			case 6: scusonfocus6(ff); break;
			case 7: scusonfocus7(ff); break;
			case 10: 
				ms.af=ff; 
				ff.focus();
			break;
			default:break;
		}
	}
	else //нормални елементи на html екран
	{
		ms.af=ff; 
		ff.focus();
	}
	return err;
}
function scusonblur(ff)
{
	if(typeof(ff.scustype)!="undefined")
	{
		switch(+ff.scustype)
		{
			case 1: scusonblur1(ff); break;
			case 2: scusonblur2(ff); break;
			case 3: scusonblur3(ff); break;
			case 4: scusonblur4(ff); break;
			case 6: scusonblur6(ff); break;
			case 7: scusonblur7(ff); break;
			default:break;
		}
	}

}
//
//*******************
// 1. за числово поле
//*******************
//дъжината на цифровото поле в пикс.=(бр.символи+1)*font-size/2
//
function scusonfocus1(ff)
{
	if(ff.scuspar_add==0) //нормално числово поле
	{
		if(parseFloat("0"+ff.value,10)==0) ff.value="0";
		ff.style.textAlign="left";
		ff.style.backgroundColor="rgb(200,255,255)"; //цвят на фона
		ff.select();
	}
	ff.focus();
	ff.scusform.af=ff;
}
function scusonblur1(ff)
{
	var scuspoint,ch1,ch=ff.value.charAt(0);
	if(ff.scuspar_add==0) //нормално числово поле
	{
		if(ch==""||(ch<"0"||ch>"9")) ff.value="0";
		else ff.value=parseFloat(ff.value);
		scuspoint=ff.value.indexOf(".",0);
		if(scuspoint==-1) 
		{
			ch=ff.value;ch1=""; //числото е целочислено
		}
		else
		{
			ch=ff.value.slice(0,scuspoint); ch1=ff.value.slice(scuspoint+1,ff.value.length);
		}

		if(ch.length>ff.scuslen-ff.scusl-1) ch=ch.slice(0,ff.scuslen-ff.scusl);
		if(ch1.length>ff.scusl)	ch1=ch1.slice(0,ff.scusl);
		while(ch1.length<ff.scusl) ch1+="0";
	
		ff.value=ch+(ff.scusl>0?".":"")+ch1;
		ff.style.textAlign="right";
		ff.style.backgroundColor="rgb(255,255,255)";
	}

	value_to_z(ff); //правя го защото е възможно да се напише по-голямо число отколкото позволята разредността и сед поправянето да се запише в записа

}
//
//***********************************
// 2. за числово дясно изравнено поле
//***********************************
//дъжината на цифровото поле в пикс.=(бр.символи+1)*font-size/2
//
function scusonfocus2(ff)
{
	if(parseFloat(ff.value)==0)	ff.value="";
	ff.style.textAlign="left";
	ff.style.backgroundColor="rgb(200,255,255)"; //цвят на фона
	ff.select();
	ff.focus();
	ff.scusform.af=ff;
}
function scusonblur2(ff)
{
	var ch=ff.value.charAt(0);
	if(ch==""||(ch<"0"||ch>"9")) ff.value="0";
	else ff.value=parseFloat(ff.value);

	scuspoint=ff.value.indexOf(".",0);
	if(scuspoint>-1) ff.value=ff.value.slice(0,scuspoint); //числото е дробно и ще взема замо цялата му част
	while(ff.value.length<ff.scuslen) ff.value="0"+ff.value;

	ff.style.textAlign="right";
	ff.style.backgroundColor="rgb(255,255,255)";
}
//
//********************
// 3. за текстово поле
//********************
//дъжината на текстово поле в пикс.=(бр.символи)*font-size
//
function scusonfocus3(ff)
{
	ff.style.backgroundColor="rgb(200,255,255)"; //цвят на фона
	ff.select();
	ff.focus();
	ff.scusform.af=ff;

}
function scusonblur3(ff)
{
	ff.style.backgroundColor="rgb(255,255,255)";
}
//
//********************
// 4. за поле dd.mm.gggg
//********************
//
function scusonfocus4(ff)
{
	ff.style.backgroundColor="rgb(200,255,255)"; //цвят на фона
	ff.select();
	ff.scusform.af=ff;

}
function scusonblur4(ff)
{
	ff.value=st_date(date_st(ff.value)); //dd.mm.gggg => цифра и после цифра => дд.мм.гггг
	ff.style.backgroundColor="rgb(255,255,255)";
}
//
//********************
// 6. за поле password
//********************
//дъжината на текстово поле в пикс.=(бр.символи)*font-size
//
function scusonfocus6(ff)
{
	ff.style.backgroundColor="rgb(200,255,255)"; //цвят на фона
	ff.select();
	ff.scusform.af=ff;

}
function scusonblur6(ff)
{
	ff.style.backgroundColor="rgb(255,255,255)";
}
//
//********************
// 7. за поле mm/DD/gggg
//********************
//
function scusonfocus7(ff)
{
	ff.style.backgroundColor="rgb(200,255,255)"; //цвят на фона
	ff.select();
	ff.scusform.af=ff;

}
function scusonblur7(ff)
{
	ff.value=st_date7(date_st7(ff.value)); //mm/DD/gggg => цифра и после цифра => MM/DD/GGGG
	ff.style.backgroundColor="rgb(255,255,255)";
}

function st_date(st)  //превръща бр дни в дд.мм.гггг
{
	var date=st_date99(st); if(date=="0,0,0,0") return "  .  .    ";
	var d=date.split(",");
	return (d[0]<10?"0":"")+d[0]+"."+(d[1]<10?"0":"")+d[1]+"."+(d[2]<10?"0":"")+d[2]+(d[3]<10?"0":"")+d[3];
}
function st_date7(st)  //превръща бр дни в mm/dd/gggg
{
	var date=st_date99(st); if(date=="0,0,0,0") return "  /  /    ";
	var d=date.split(",");
	return (d[1]<10?"0":"")+d[1]+"/"+(d[0]<10?"0":"")+d[0]+"/"+(d[2]<10?"0":"")+d[2]+(d[3]<10?"0":"")+d[3];
}
function st_date99(st)  
{
	st=parseInt("0"+st,10); //ако st е стринг => правя го цяло число

	if(st<0||st>3652441) st=0;
	if(st==0) return "0,0,0,0";

	if(st>584459)  //дата 28.02.1600
	{
		st-=365254; 
		
		hil=parseInt((st-1)/365243,10); st-=hil*365243;
		
		vekper=parseInt((st-1)/146097,10); st-=vekper*146097;

		visvek=(st>59); st-=visvek; vek=parseInt((st-1)/36524,10); st-=vek*36524;

		visper=parseInt(st/1461,10); st-=visper*1461;

		st+=((visper==0&&vek==0)||(visper>0))*visvek; fev29=(visper==0&&vek>0?0:(st>59));
		st-=fev29; st1=st; god=parseInt((st-1)/365,10); st-=god*365; 
		god+=visper*4;

		s=new Array(31,59,90,120,151,181,212,243,273,304,334,366);
		for(i=0;i<12;i++)
		{
			mes=s[i];
			if(st<=mes) { mes=i+1; break; }
		}
		s1=new Array(0,31,59,90,120,151,181,212,243,273,304,334);
		dni=st-s1[mes-1]+(st1==59&&fev29);

		vek1=((hil+1)*10+vekper*4+vek);
	}
	else
	{
		vek=parseInt((st-1)/36525,10); st-=vek*36525;
		visvek=parseInt(vek/10,10); visvek=vek-visvek*10; visvek=(st>59&&vek>15&&(visvek%4==0));
		visper=parseInt((st-1)/1461,10); st-=visper*1461;
		fev29=(st>59); st-=fev29; st1=st;
		god=parseInt((st-1)/365,10); st-=god*365; god+=visper*4;
		for(i=0;i<12;i++)
		{
			s=new Array(31,59,90,120,151,181,212,243,273,304,334,366);
			mes=s[i];
			if(st<=mes) { mes=i+1;  break; }
		}
		s1=new Array(0,31,59,90,120,151,181,212,243,273,304,334);
		dni=st-s1[mes-1]+(st1==59&&fev29);

		vek1=vek;
	}
	return dni+","+mes+","+vek1+","+god;
}
function date_st(date)  //превръща дд.мм.гггг в стойност
{
	if(date.length!=10) return 0;

	// d0->dd; d1->mm; d2->vek; d3->god
	d0=parseInt("0"+date.slice(0,2),10);if(d0==0||d0>31) return 0;
	d1=parseInt("0"+date.slice(3,5),10);if(d1==0||d1<0||d1>12) return 0;
	d2=parseInt("0"+date.slice(6,8),10);
	d3=parseInt("0"+date.slice(8,10),10);

	return date_st99(d0,d1,d2,d3);
}
function date_st7(date)  //превръща мм/dd/gggg в стойност
{
	if(date.length!=10) return 0;

	// d0->dd; d1->mm; d2->vek; d3->god
	d0=parseInt("0"+date.slice(3,5),10);if(d0==0||d0>31) return 0;
	d1=parseInt("0"+date.slice(0,2),10);if(d1==0||d1<0||d1>12) return 0;
	d2=parseInt("0"+date.slice(6,8),10);
	d3=parseInt("0"+date.slice(8,10),10);

	return date_st99(d0,d1,d2,d3);
}

function date_st99(d0,d1,d2,d3)
{
	s=new Array(0,31,59,90,120,151,181,212,243,273,304,334);

	result=s[d1-1]+d0; result1=result;
	visper=parseInt(d3/4,10); result+=visper*1461; d3-=visper*4;
	result+=d3>0||(result1>59&&d1>2);
	result+=d3*365+d2*36525;
	if(result>584459)
	{
		a=parseInt(d2/10,10); b=d2-a*10; c=parseInt(b/4,10);
		gregcal=(a-1)*7-4+b-c;
		usl=b; usl=parseInt(usl/4,10);
		usl=usl!=c;
		result=result-gregcal+((result1<60)*(d3==0)*(visper==0)*usl);
	}
	return result;
}

function st_hour(sec)
{
	if(sec<0||sec>359999) sec=0;
	hour=parseInt(sec/3600,10); sec-=hour*3600; min=parseInt(sec/60,10); sec-=min*60;
	return (hour<10?"0":"")+hour+":"+(min<10?"0":"")+min+":"+(sec<10?"0":"")+sec;
}
function hour_st(hour)
{
	d0=parseInt("0"+hour.slice(0,2),10);
	d1=parseInt("0"+hour.slice(3,5),10);
	d2=parseInt("0"+hour.slice(6,8),10);
	sec=d0*3600+d1*60+d2;
	return sec>359999?0:sec;
}



//
//*******************
// 4. за виртуално поле
//*******************
//дъжината на цифровото поле в пикс.=(бр.символи+1)*font-size/2
//
//function scusonfocus4(ff)
//{
//	f=document[ff.scusform.id].elements[ff.scustabindex-1];
//	f.focus();
//}


