//изчисляване на формули
//Христо Марков Христов - 28 септември 2006 г.

//
//изчисляване на формули
//
// клас CScusform => за изчисляване на формули
//

scusform=new CScusform();
function CScusform()
{
	//
	//променливи
	//

	this.z=""; //указател към запис

	//
	//фунции
	//
	//функции които могат да се превеждат директно във формулата
	//
	// $L(STR) => STR.length
	// $L(STR,ZN) => STR.search(ZN)
	// $E(STR) => STR.charAt(0)
	// $E(STR,BR) => STR.slice(0,BR2)
	// $E(STR,BR1,BR2) => STR.slice(BR1,BR2)
	// $S(USL1,ST1,USL2,ST2,...) => USL1?ST1:USL2?ST2:USL3?ST3:...:""
	//

	this.scusf=CScusform_scusf;
	this.$1=CScusform_$1;
	this.$2=CScusform_$2;
	this.$3=CScusform_$3;
	this.$4=CScusform_$4;
	this.$5=CScusform_$5;
	this.$6=CScusform_$6;
	this.$7=CScusform_$7;
	this.$8=CScusform_$8;
	this.$10=CScusform_$10;
	this.$11=CScusform_$11;
	this.$12=CScusform_$12;
	this.$13=CScusform_$13;
	this.$14=CScusform_$14;
	this.$19=CScusform_$19;
	this.$20=CScusform_$20;
	this.$21=CScusform_$21;
	this.$22=CScusform_$22;
	this.$24=CScusform_$24;
	this.$25=CScusform_$25;
	this.$26=CScusform_$26;
	this.$27=CScusform_$27;
	this.$28=CScusform_$28;
	this.$29=CScusform_$29;
}
//function CScusform_scusf(Z,Form)
function CScusform_scusf(Form,Z)
{
	if(typeof(Z)!="undefined") this.z=Z;
	else this.z="";

	var ret;

	if(Form.charAt(0)=="C"||Form.charAt(0)=="c") //премахвам 'С' от началото на формулата
	{
		Form=Form.slice(1,Form.length);
	}
	with(this)
	{
		ret=eval(Form);
	}
	return ret;
}
function CScusform_$1(Str){return Str.length;} // $L(STR)
function CScusform_$2(Str,Zn){return Str.search(Zn);} // $L(STR,ZN)
function CScusform_$3(Str){return Str.charAt(0);} // $E(STR)
function CScusform_$4(Str,Br){return Str.slice(0,Br);} // $E(STR,BR)
function CScusform_$5(Str,Br1,Br2){return Str.slice(Br1,Br2);} // $E(STR,BR1,BR2)

function CScusform_$6(Str,Razd,Br) // $P(STR,RAZD,BR)
{
	var piece=Str.split(Razd);
	if(piece.length<Br||Br<1) return "";
	return piece[Br-1];
}
function CScusform_$7(
Usl1,St1,Usl2,St2,Usl3,St3,Usl4,St4,Usl5,St5,Usl6,St6,Usl7,St7,Usl8,St8,Usl9,St9,Usl10,St10,
Usl11,St11,Usl12,St12,Usl13,St13,Usl14,St14,Usl15,St15,Usl16,St16,Usl17,St17,Usl18,St18,Usl19,St19,Usl20,St20,
Usl21,St21,Usl22,St22,Usl23,St23,Usl24,St24,Usl25,St25,Usl26,St26,Usl27,St27,Usl28,St28,Usl29,St29,Usl30,St30,
Usl31,St31,Usl32,St32,Usl33,St33,Usl34,St34,Usl35,St35,Usl36,St36,Usl37,St37,Usl38,St38,Usl39,St39,Usl40,St40,
Usl41,St41,Usl42,St42,Usl43,St43,Usl44,St44,Usl45,St45,Usl46,St46,Usl47,St47,Usl48,St48,Usl49,St49,Usl50,St50
) // //$S(%USL1,%ST1,%USL2,%ST2,...); => връща при изпълнено условие - полагащата му се стойност
{
	var i7,usl;
	for(i7=0;i7<50;i7++)
	{
		if((usl=eval("Usl"+(i7+1)))) return eval("St"+(i7+1));
		else if(typeof(usl)=="undefined") return "";
	}
	return "";
}
function CScusform_$8(Str,Len,L) // $J(STR,LEN,L) => изравнява подаденият стринг
{
	var i,ch1;
	if(L>0) // изравнявам дробната част
	{
		ch1=Str.slice(Str.indexOf(".",0)+1,Str.length);
		i=ch1.length;
		while(i-->0) Str+="0";
	}
	if((i=(Len-Str.length))>0) //изравнявам целият стринг
	{
		while(i-->0) Str=" "+Str;
	}
	return Str;
}
function CScusform_$10(Nom,Tip,Len,L) //реално поле
{
	if(this.z=="") return "";

	var st=this.z.p(Nom);
	return (Tip==3||Tip==6)?st:(+st);

//	return this.z.p(Nom);
}
function CScusform_$11(Nom,Tip,Len,L) //виртуално поле
{
	if(this.z=="") return "";
	var vnom=this.z.vnom[Nom];

	if(typeof(this.z.vform[vnom])=="undefined")//формулата не е заредена
	{
/*
//не съм го тествал

		g0=new CScusz1();
		g0.t="SCUSXXXXFORM";
		g0.npstr="SYS,NOMFORM,NOM,TRFORM";
		g0.np=g0.npstr.split(",");
		g0.tip="3,1,2,3".split(",");
		g0.len="8,8,3,255".split(",");
		g0.l="0,0,0,0".split(",");
		g0.indnom="1,2,3".split(",");
		g0.mknom="1,2,3".split(",");
		g0.z=new Array(4);

		for(i=8;i--;i>0) if(this.z.t.slice(i-1,i)!="X") break;
		g0.z[0]=this.z.t.slice(0,i); //зареждам sys
		g0.z[1]=Nom;

		if(g0.read_first()==scus_success)
		{
			this.z.vform[Nom]="";
			do
			{
				this.z.vform[Nom]+=g0.z[3];
			}while(g0.read_next()==scus_success);
		}
*/
		
	}
	if(typeof(this.z.vform_st[vnom])=="undefined")//ст-та на вирт. поле трябва да се преизчисли
	{
		this.z.vform_st[vnom]=this.scusf(this.z.vform[vnom],this.z);
	}

	var st=this.z.vform_st[vnom];
	return (Tip==3||Tip==6)?st:(+st);
}
function CScusform_$12(Nv,Nom,Tip,Len,L) //реално поле по връзка
{
	if(this.z=="") return "";
	if(this.z.readzvr(Nv)!=scus_success) return "";
	var st=this.z.zvr[Nv].p(Nom);
	return (Tip==3||Tip==6)?st:(+st);
}
function CScusform_$13(Nv,Nom,Tip,Len,L) //виртуално поле по връзка
{
	if(this.z=="") return "";
	if(this.z.readzvr(Nv)!=scus_success) return "";
	var vform=new CScusform();

	var st=vform.scusf("$11("+Nom+","+Tip+","+Len+","+L+")",this.z.zvr[Nv]);
	return (Tip==3||Tip==6)?st:(+st);
}
function CScusform_$14(Sys,Vid,Ime,Par1,Par2,Par3,Par4,Par5,Par6,Par7,Par7) //$element(sys,vid,ime)
{
	var par1=typeof(Par1)!="undefined"?Par1:"";
	var par2=typeof(Par2)!="undefined"?Par2:"";
	var par3=typeof(Par3)!="undefined"?Par3:"";
	var par4=typeof(Par4)!="undefined"?Par4:"";
	var par5=typeof(Par5)!="undefined"?Par5:"";
	var par6=typeof(Par6)!="undefined"?Par6:"";
	var par7=typeof(Par7)!="undefined"?Par7:"";
	var par8=typeof(Par8)!="undefined"?Par8:"";
	var str,w,i;
	switch(Vid)
	{
		case 1: //екрани
		{
			if(Ime!="SCUSLAST")
			{
				str="";
				if(Sys!="") str="../../"+Sys+"/prg/";
				str+=Ime+".php";
			}
			else
			{
//				alert(scusreferer);
//				if(scusreferer!="") str=scusreferer;
//				else str="../../"+Sys+"/prg/START.php";
				str="../../"+Sys+"/prg/START.php";
//				alert(str);
			}

//			par1==1?window.open(str):location.href=str;
			par1==1?parent.location.href=str:par1==2?window.open(str):location.href=str;
		}
		break;
		case 2: //обработки

			par5=""; 
			if(typeof(this.z.z)!="undefined")
			{
				for(i=0;i<this.z.z.length;i++) par5+=(i?"\022":"")+this.z.z[i];
			}

			str="";
			if(Sys!="") str="../../"+Sys+"/prg/";
			str+="eaeaeaea_"+Ime+".php";

			xmlhttp.open("POST",str,false);
			xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

			xmlhttp.send("par1="+escape(Utf8.encode(par1))
				 +"&"+"par2="+escape(Utf8.encode(par2))
				 +"&"+"par3="+escape(Utf8.encode(par3))
				 +"&"+"par4="+escape(Utf8.encode(par4))
				 +"&"+"par5="+escape(Utf8.encode(par5))
				 );


//			alert(xmlhttp.responseText);
			return xmlhttp.responseText;
		break;
		case 3: //табулограми
//			str="";
			str=scus_check;
			if(Sys!="") str+="/"+Sys+"/prg/";
//			if(Sys!="") str="../../"+Sys+"/prg/";
			str+="ofofofof_"+Ime+".php";

			var inner;

			if(typeof(Par6)=="undefined") //отваря се нов прозорец за табулограма
			{
				inner="<form id=\\\"of\\\" name=\\\"of\\\" action=\\\""+str+"\\\" method=\\\"post\\\" style=\\\"visibility:hidden;\\\">"
					+"<input type=\\\"text\\\" name=\\\"par1\\\" value=\\\""+par1+"\\\">"
					+"<input type=\\\"text\\\" name=\\\"par2\\\" value=\\\""+par2+"\\\">"
					+"<input type=\\\"text\\\" name=\\\"par3\\\" value=\\\""+par3+"\\\">"
					+"<input type=\\\"text\\\" name=\\\"par4\\\" value=\\\""+par4+"\\\">"
					+"<input type=\\\"text\\\" name=\\\"par5\\\" value=\\\""+par5+"\\\">"
					+"<input type=\\\"text\\\" name=\\\"par6\\\" value=\\\""+par6+"\\\">"
					+"<input type=\\\"text\\\" name=\\\"par7\\\" value=\\\""+par7+"\\\">"
					+"<input type=\\\"text\\\" name=\\\"par8\\\" value=\\\""+par8+"\\\">"
					+"</form>"
					+"<script type=\\\"text/javascript\\\">"
					+"document.forms[\\\"of\\\"].submit();"
					+"</script>"
					;
				w=window.open('javascript:opener.innerHTML="' + inner + '";');
			}
			else
			{
				inner="<form id=\"of\" name=\"of\" action=\""+str+"\" method=\"post\" style=\"visibility:hidden;\">"
					+"<input type=\"text\" name=\"par1\" value=\""+par1+"\">"
					+"<input type=\"text\" name=\"par2\" value=\""+par2+"\">"
					+"<input type=\"text\" name=\"par3\" value=\""+par3+"\">"
					+"<input type=\"text\" name=\"par4\" value=\""+par4+"\">"
					+"<input type=\"text\" name=\"par5\" value=\""+par5+"\">"
					+"<input type=\"text\" name=\"par6\" value=\""+par6+"\">"
					+"<input type=\"text\" name=\"par7\" value=\""+par7+"\">"
					+"<input type=\"text\" name=\"par8\" value=\""+par8+"\">"
					+"</form>"
					;
				w=Par6=="current_window"?window.document:navigator.appName=='Netscape'?document.getElementById(Par6).contentDocument:document.getElementById(Par6).contentWindow.document;
				w.body.innerHTML=inner;
				w.getElementById("of").submit();
			}

/*
			str="";
			if(Sys!="") str="../../"+Sys+"/prg/";
			str+="ofofofof_"+Ime+".php";

			w=typeof(Par6)=="undefined"?window.open("about:blank"):Par6=="current_window"?window:document.getElementById(Par6).contentWindow;
			wbody=w.document.body;
			wbody.innerHTML="<form id=\"of\" name=\"of\" action=\""+str+"\" method=\"post\" style=\"visibility:hidden;\">"
			+"<input type=\"text\" name=\"par1\" value=\""+par1+"\">"
			+"<input type=\"text\" name=\"par2\" value=\""+par2+"\">"
			+"<input type=\"text\" name=\"par3\" value=\""+par3+"\">"
			+"<input type=\"text\" name=\"par4\" value=\""+par4+"\">"
			+"<input type=\"text\" name=\"par5\" value=\""+par5+"\">"
			+"<input type=\"text\" name=\"par6\" value=\""+par6+"\">"
			+"<input type=\"text\" name=\"par7\" value=\""+par7+"\">"
			+"<input type=\"text\" name=\"par8\" value=\""+par8+"\">"
			+"</form>"
			;

			w.document.of.submit();
*/



		break;
	}
	return "";
}
function scusinner(myText)
{
return [

'<html><head><title></title></head>' ,
'<body>' ,
myText ,
'</body></html>'
].join('');

}
function CScusform_$19(Func,Par1,Par2,Par3,Par4,Par5,Par6,Par7,Par8,Par9,Par10,
Par11,Par12,Par13,Par14,Par15,Par16,Par17,Par18,Par19,Par20,
Par21,Par22,Par23,Par24,Par25,Par26,Par27,Par28,Par29,Par30
) //$sp(func,par1,par2,...) => изпълнява системни програми
{

	switch(Func)
	{
		case 0: //затваря прозорци
		{
			switch(Par1)
			{
				case 0: //затваря главният прозорец
				close();
				break;
				case 1: //връща назад
				history.back();
				break;
			}
		}
		break;
		case 1: //зарежда реалните полета във вх./изх. фаил
		break;
		case 2: //връща линията на компютъра
		{
			switch(Par1)
			{
				case 1: //username
				break;
				case 2: //line
				break;
				case 3: //ip на клиента
					return (typeof(scusip)=="undefined")?"":scusip;
				break;
				case 4: //проверка на e-mail
					var em=/^(([\-\w]+)\.?)+@(([\-\w]+)\.?)+\.[a-zA-Z]{2,4}$/;
					if(em.test(Par2)) return scus_success;
					else return scus_error;
				break;
			}
		}
		break;
		case 3: //изтрива определен фаил (форматиране)
		break;
		case 10: //допълнителни функции
			switch(Par1)
			{
				case 0: //връща текстово наименование на цифрата
					// $sp(10,110.05," лева"," стотинки") => връща стринга "сто и десет цяло и пет стотинки"
					return imec(Par2,Par3,Par4);
				case 1: //dd.mm.gggg
					switch(Par2)
					{
						case 0: return date_st(Par3); //dd.mm.gggg => цифра
						case 1: return st_date(Par3); //цифра =>dd.mm.gggg
						case 2: //връща тек.дата в число
							xmlhttp.open("POST","../system/date.php",false);
							xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
							xmlhttp.send("scustype="+escape("4"));

							var ret=xmlhttp.responseText.split(";");
							return date_st(ret[0]);
						break;
					}
				case 2: //hh:mm:ss
					switch(Par2)
					{
						case 0: return hour_st(Par3); //hh:mm:ss => цифра
						case 1: return st_hour(Par3); //цифра =>hh:mm:ss
						case 2: //връща тек.час в число
							xmlhttp.open("POST","../system/date.php",false);
							xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
							xmlhttp.send("scustype="+escape("4"));
//							alert(xmlhttp.responseText);
							var ret=xmlhttp.responseText.split(";");
							return hour_st(ret[1]);
						break;
					}
			}
		break;
		case 12: //копира елементи
		break;
		case 13: //връща параметри на поле
				 //$sp(13,sys,file,nv,np,nom)
		break;
		case 17: //стартира външни програми
				 //$sp(17,Prg)
//			window.open(Par1,"");
			location.href=Par1;
		break;
		case 18: //връща сумарна стойност от няколко записа
				 //$sp(18,ime, физ.вр., sys,file,key,np,usl,gr1,gr2,...)
		break;
		case 19: //изпълнява sql заявка
		break;
		case 24: //извежда съобщение
			alert(Par1);
		break;
		case 25: //работа със сесии
			switch(Par1)
			{
				case 1: //login в системата
					if(typeof(Par2)=="undefined") return 1;
					if(typeof(Par3)=="undefined") return 1;
					if(typeof(Par4)=="undefined") return 1;
					if(typeof(Par5)=="undefined") return 1;

					xmlhttp.open("POST","../system/login.php",false);
					xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

					xmlhttp.send("scust="+escape(Utf8.encode(Par2))
						 +"&"+"scusu="+escape(Utf8.encode(Par3))
						 +"&"+"scusp="+escape(Utf8.encode(Par4))
						 +"&"+"scusl="+escape(Utf8.encode(Par5))
						 );


//					alert(xmlhttp.responseText);
					return xmlhttp.responseText;
				break;
				case 2: //logout от системата
					xmlhttp.open("POST","../system/logout.php",false);
					xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

					xmlhttp.send("");

//					alert(xmlhttp.responseText);
					return xmlhttp.responseText;
				break;
				case 3: //NEW PAW
					if(typeof(Par2)=="undefined") return 1;
					if(typeof(Par3)=="undefined") return 1;
					if(typeof(Par4)=="undefined") return 1;
					if(typeof(Par5)=="undefined") return 1;

					xmlhttp.open("POST","../system/newpw.php",false);
					xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

					xmlhttp.send("scust="+escape(Par2)	//таблица
						 +"&"+"scusemp="+escape(Par3)	//E-Mаил Pole
						 +"&"+"scusemst="+escape(Par4)	//E-Mаил STojnost
						 +"&"+"scuspp="+escape(Par5)	//ime na Pole - Parola
						 );


//					alert(xmlhttp.responseText);
					return xmlhttp.responseText;
				break;

			}
		break;
	}
	return "";

}
function CScusform_$20(Sys,Vid,Ime,D) //$de(sys,vid,ime,d) - функцията изтрива елемент
//d=0 -> генерираният елемент
//d=1 -> всичко /описание+генериран елемент/
{
	switch(Vid)
	{
		case 1: //екрани BW
		break;
		case 2: //екрани MS
		break;
		case 3: //обработки
		break;
		case 4: //табулограми
		break;
		case 5: //вх./изх. фаил
		break;
		case 33: //графична директория
		break;
		case 100: //цяла система
		break;
		case 101: //описание на фаил
		break;
	}
	return "";
}
function CScusform_$21(Bw,Ms,Np) //$gf(bw,ms,np) - връща стойност на поле от ms в bw
{
}
function CScusform_$22(Conn,Sys,File,Form) //$check(conn,sys,file,form) - проверка на формули
{
}
function CScusform_$24(Nom,Tip,Len,L) //$vnp(nom,tip,len,l) - виртуално наименование на поле
{
}
function CScusform_$25(Nv,Nom,Tip,Len,L) //$vnpv(nv,nom,tip,len,l) - виртуално наименование на поле по връзка
{
}
function CScusform_$26(Str,I,J) //$sum("string",i,j)
{
}
function CScusform_$27() //$I()
{

//	alert("$i()=="+scusi);
	if(typeof(scusi)=="undefined") return 0;
	return scusi;
}
function CScusform_$28(Str,Str1,Str2) //$tr(str,"str1","str2")
{
}
function CScusform_$29(X1,Y1,X2,Y2,Ime,Scroll_x,Scroll_y) //show hide window
{
	window.open("mmmmmmmm_"+Ime+".php",Ime,"top="+Y1+"px,left="+X1+"px,width="+(X2-X1)+"px,height="+(Y2-Y1)+"px,resizable=yes");
}
function CScusform_$30(Cmd,Data) //fiscal printer
{
}

var Utf8 = {

	// public method for url encoding
	encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// public method for url decoding
	decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

}